IO异常处理

之前我们写代码的时候都是直接抛出异常,但是我们试想一下,如果我们打开了一个流,在关闭之前程序抛出了异常,那我们还怎么关闭呢?这个时候我们就要用到异常处理了。
try-with-resource语句: 确保在异常出现后 打开的流能自动关闭,无需单独再写.close()流关闭语句。
语法:
try(构建流通道语句){
  业务处理逻辑
}catch(异常){
  异常处理逻辑
}finally{
  ....
}
 
示例代码:
import java.io.*;
import java.nio.charset.Charset; /**
* @ClassName FileCopyTryCatchExample
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/4/17.
*/
public class FileCopyTryCatchExample {
public static void main(String[] args){
String srcPath = "C:\\Users\\ZHANGMINGDA\\Pictures\\康熙北巡.jpg";
String dstpath = "C:\\Users\\ZHANGMINGDA\\Pictures\\康熙北巡bak.jpg";
char[] tmpchars = new char[1024];
int readLength; // try(Reader fileReader = new FileReader(srcPath); Writer fileWriter = new FileWriter(dstpath)){
try(Reader fileReader = new MyFileReader(srcPath); Writer fileWriter = new MyFileWriter(dstpath)){
while ((readLength = fileReader.read(tmpchars)) != -1){
fileWriter.write(tmpchars,0,readLength);
}
// fileReader.close();
// fileWriter.close();
}catch (FileNotFoundException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}finally {
System.out.println("done");
}
}

//测试try(构建流)语句是否自动关闭流,重写FileReader和FileWriter
public static class MyFileReader extends FileReader{ public MyFileReader(String fileName) throws FileNotFoundException {
super(fileName);
} public MyFileReader(File file) throws FileNotFoundException {
super(file);
} public MyFileReader(FileDescriptor fd) {
super(fd);
} public MyFileReader(String fileName, Charset charset) throws IOException {
super(fileName, charset);
} public MyFileReader(File file, Charset charset) throws IOException {
super(file, charset);
} @Override
public void close() throws IOException {
super.close();
System.out.println("关闭了输入流");
}
} public static class MyFileWriter extends FileWriter { public MyFileWriter(String fileName) throws IOException {
super(fileName);
} public MyFileWriter(String fileName, boolean append) throws IOException {
super(fileName, append);
} public MyFileWriter(File file) throws IOException {
super(file);
} public MyFileWriter(File file, boolean append) throws IOException {
super(file, append);
} public MyFileWriter(FileDescriptor fd) {
super(fd);
} public MyFileWriter(String fileName, Charset charset) throws IOException {
super(fileName, charset);
} public MyFileWriter(String fileName, Charset charset, boolean append) throws IOException {
super(fileName, charset, append);
} public MyFileWriter(File file, Charset charset) throws IOException {
super(file, charset);
} public MyFileWriter(File file, Charset charset, boolean append) throws IOException {
super(file, charset, append);
} @Override
public void close() throws IOException {
super.close();
System.out.println("关闭了输出流");
}
}
}

java 输入输出IO流 IO异常处理try(IO流定义){IO流使用}catch(异常){处理异常}finally{死了都要干}的更多相关文章

  1. java 输入输出IO流 字符流 FileWriter FileReader

    为什么要使用字符流 当使用字节流读取文本文件时,可能会有一个小问题.就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储.所以Java提供一些字符流类,以字符为单位读写 ...

  2. IO流的异常处理

    在IO流的异常处理时应该注意以下几点: 1.在外边建立引用,在Try内进行初始化(FileWriter fw = null;) 2.文件的路径使用必须是双斜杠,转义(fw = new FileWrit ...

  3. File类的特点?如何创建File类对象?Java中如何操作文件内容,什么是Io流Io流如何读取和写入文件?字节缓冲流使用原则?

    重难点提示 学习目标 1.能够了解File类的特点(存在的意义,构造方法,常见方法) 2.能够了解什么是IO流以及分类(IO流的概述以及分类) 3.能够掌握字节输出流的使用(继承体系结构介绍以及常见的 ...

  4. java IO输入输出流中的各种字节流,字符流类

    字节流字节流主要是操作byte类型数据,也byte数组为准,主要操作类就是·字节输出流:OutputStream·字节输入流:InputStream字符流在程序中一个字符等于2个字节,那么java提供 ...

  5. java 输入输出 io

    学习JAVA  输入输出篇 java不像C中拥有scanf这样功能强大的函数,大多是通过定义输入输出流对象.常用的类有BufferedReader,Scanner.实例程序:一,利用 Scanner ...

  6. Java基础---IO(二)--File类、Properties类、打印流、序列流(合并流)

    第一讲     File类 一.概述 1.File类:文件和目录路径名的抽象表现形式 2.特点: 1)用来将文件或文件夹封装成对象 2)方便于对文件与文件夹的属性信息进行操作 3)File类的实例是不 ...

  7. JAVA里面的IO流(一)分类2(节点流和处理流及构造方法概要)

    IO流根据处理对象的不同分为节点流和处理流. 直接对文件进行处理的流为节点流: 对流进行包装从而实现对文件的优化处理的流为处理流. 节点流类型: 可以看出,节点流主要分这几大类: 文件流 文件流构造方 ...

  8. JAVASE02-Unit08: 文本数据IO操作 、 异常处理

    Unit08: 文本数据IO操作 . 异常处理 * java.io.ObjectOutputStream * 对象输出流,作用是进行对象序列化 package day08; import java.i ...

  9. IO流----File,递归,字节流,字符流

    要把数据持久化存储,就需要把内存中的数据存储到内存以外的其他持久化设备(硬盘.光盘.U盘等)上. 当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作. 当把持久设备上的数据读 ...

随机推荐

  1. html+css第四篇

    浮动 float浮动: 1.块在一排显示 2.内联支持宽高 3.默认内容撑开宽度 4.脱离文档流 5.提升层级半层 float:left | right | none | inherit; 文档流是文 ...

  2. 【Python】批量给图片增加水印工具

    背景 最近有一些图片需要增加水印,找了一圈也没看见比较好的工具,又不想用破解的PS,干脆自己做了一个GUI工具,有需要的同学自取 功能 支持水印预览 自定义水印文字内容 支持行楷和微软雅黑两种字体 支 ...

  3. k8s-数据持久化存储卷,nfs,pv/pvc

    目录 数据持久化-储存卷 官方文档 存储卷类型 1.emptyDir 2.hostpath 3.pv/pvc(推荐使用) nfs官方文档 安装测试nfs pv/pvc管理nfs 官方文档 pv/pvc ...

  4. HDU 6984 - Tree Planting(数据分治+状压 dp)

    题面传送门 傻逼卡常屑题/bs/bs,大概现场过得人比较少的原因就是它比较卡常罢(Fog 首先对于这样的题我们很难直接维护,不过注意到这个 \(n=300\) 给得很灵性,\(k\) 比较小和 \(k ...

  5. C语言计算fastq文件GC含量2

    改进了一下,利用zlib可以读取gz格式的压缩文件,也可以直接计算非压缩格式 #include <stdio.h> #include <stdlib.h> #include & ...

  6. karatsuba乘法

    karatsuba乘法 Karatsuba乘法是一种快速乘法.此算法在1960年由Anatolii Alexeevitch Karatsuba 提出,并于1962年得以发表.[1] 此算法主要用于两个 ...

  7. 自动化测试系列(二)|API测试

    在上次的自动化测试系列(一)中为大家大体介绍了自动化测试的概念,本文主要针对API测试的概念及API测试在猪齿鱼Choerodon中的实践展开. API(应用程序编程接口)测试是一种软件测试,可以直接 ...

  8. PC端页面转换成手机端页面的分辨率问题的理解

    PC端页面转换成手机端页面的分辨率问题的理解 px vw rem 假如就以a4纸模式为设计图 ,在a3纸模式中设计,然后设计出来展示在不同的a4纸模式上 通常是 750px -> 100vw / ...

  9. [php反序列化] CVE-2020-15148(Yii2 反序列化漏洞) 漏洞复现

    漏洞影响范围 Yii2 < 2.0.38 环境搭建 Yii2.0.37 漏洞分析 首先定位到漏洞起始点 为什么是这儿?我们该怎么发现是某个类的某个函数?为什么不是其他函数? 一般是__destr ...

  10. 容器之分类与各种测试(三)——stack

    stack是栈,其实现也是使用了双端队列(只要不用双端队列的一端,仅用单端数据进出即完成单端队列的功能),由于queue和stack的实现均是使用deque,没有自己的数据结构和算法,所以这俩也被称为 ...