java文件IO,关闭顺序
来源:互联网 发布:剑网3捏脸数据 编辑:程序博客网 时间:2024/06/02 00:28
io笔记
当混用用了字符流和字节流,就涉及到关闭问题了
下面是一段 io 代码
// 字节流和字符流的相互转化
FileInputStream fileInputStream = null;
BufferedWriter writer = null;
BufferedReader reader = null;
try {
fileInputStream = new FileInputStream("1.txt");
// inputSreamReader本来就是reader对象,创建的时候需要传入一个InputStream对象,将字节流转化为字符流
reader = new BufferedReader(new InputStreamReader(fileInputStream));
// 将字符流转化为字节流
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream("2.txt"));
writer = new BufferedWriter(outputStreamWriter);
// 实现拷贝文件的操作
String buf;
while ((buf = reader.readLine()) != null) {
writer.write(buf);
writer.newLine();
System.out.println(buf);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (writer != null) {
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
// 关闭流
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
这里有关闭的顺序的,否则会报错
这里可以看java.io.BufferedInputStream 的api close方法
/**
* Closes this input stream and releases any system resources
* associated with the stream.
* Once the stream has been closed, further read(), available(), reset(),
* or skip() invocations will throw an IOException.
* Closing a previously closed stream has no effect.
*
* @exception IOException if an I/O error occurs.
*/
关闭该流并释放与之关联的所有资源。在关闭该流后,再调用 read()、ready()、mark()、reset() 或 skip() 将抛出 IOException。关闭以前关闭的流无效。
这样理解:
java.io.BufferedInputStream是java.io.InputStream的装饰类。
BufferedInputStream装饰一个 InputStream 使之具有缓冲功能
要关闭只需要调用最终被装饰出的对象的 close()方法即可,因为它最终会调用真正数据源对象的 close()方法。
一般情况下是:先打开的后关闭,后打开的先关闭
另一种情况:看依赖关系,如果流a依赖流b,应该先关闭流a,再关闭流b
例如处理流a依赖节点流b,应该先关闭处理流a,再关闭节点流b
当然完全可以只关闭处理流,不用关闭节点流。处理流关闭的时候,会调用其处理的节点流的关闭方法
如果将节点流关闭以后再关闭处理流,会抛出IO异常;
- java文件IO,关闭顺序
- java IO 关闭顺序分析
- 【JAVA】IO流关闭顺序
- JAVA IO 流的关闭顺序!
- Java IO之写入流关闭关闭顺序
- Java IO包装流如何关闭?(关闭顺序)
- io流关闭顺序
- java中io各种流的关闭顺序
- java中io各种流的关闭顺序
- java中io各种流的关闭顺序
- java中io各种流的关闭顺序
- Java中IO各种流的先后关闭顺序
- IO流操作后 关闭顺序
- java io 流的关闭
- 深入学习Java IO关闭
- JAVA——IO流 之 节点流和处理流以及流的关闭顺序(5)
- 【java io】io copy文件
- Java无法删除被占用资源文件解决办法(IO流的关闭)
- 初学Java反射之简单明了的反射例子。
- Map(键-值)
- 手动创建WorkSpace方式的iOS多工程联合编译包含Static Library
- tensorflow从0开始(7)——利用tensorflow进行开发的准备工作(续1)
- C#控制台 for循环的标准格式
- java文件IO,关闭顺序
- sql数据库中怎么根据存储过程名字,查出存储过程的内容?
- 十进制和二进制快速转换
- AsyncTask的代码
- Android Studio系列教程4 (Gradle基础)
- iOS笔记 常用代码
- python中的pandas小试
- 前端移动端页面开发
- ViewPager无限轮播图+小圆点+HttpURLConnection +handler+Thread