java关闭流的顺序影响程序结果

java关闭流的顺序影响程序结果,第1张

bw是缓冲流,使用bw.write 后,数据并没有直接写入txt文件中,而是在bw的缓冲咐绝区内,所以这时先关闭输出流fw,则txt中就是空的了,如果先关闭bw,则缓冲流会在内部先调用bw.flush()将缓冲区的内容输出到文件中,所以txt才有内容。要解决做伏这个问题,需要在bw.write 后显示调用bw.flush()这样先关闭那个流都一样衡胡姿了

原因:关闭处理流br.close()之后,紧接着关闭了与之相关的fsin.close()的节点流。事实上,br.close()会调用fsin.close()因此重复关闭了2次fsin.close()最后抛出了异常

回顾了一下流的知识:

(1)按照流是否直接与特定的地方(如磁盘、内存、设备等)相连,分为节点流和处理流两类。

节点流:可以从或向一个特定的地方(节点)读写数据。如FileReader.

处理流:是对旁搜银一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。

(2)JAVA常用的节点流:

文 件 FileInputStream FileOutputStrean FileReader FileWriter 文件进行处理的节点流。

字符串 StringReader StringWriter 对字符串进行处理的节点流。

数 组 ByteArrayInputStream ByteArrayOutputStreamCharArrayReader CharArrayWriter 对数组进行处理的节点流(对应的不再是文件,而是内存中的一个数组)。

管 道 PipedInputStream PipedOutputStream PipedReaderPipedWriter对管道进行处理的节点流。

(3)常用处理流(关闭处理流使用关闭里面的节点流)

缓冲流:BufferedInputStrean BufferedOutputStream BufferedReader BufferedWriter —增加缓冲功能,避免频繁读写硬盘。

转换流:InputStreamReader OutputStreamReader实现字节流和字符流之间的转换。

数据运宴流 DataInputStream DataOutputStream 等-提供将基础数据类型写入到文件中,或者读取出来.

流的关闭顺序

-一般情况下是:先打开的后关闭,后打开的先关闭。

-另一种情况:看依赖关漏简系,如果流a依赖流b,应该先关闭流a,再关闭流b。例如,处理流a依赖节点流b,应该先关闭处理流a,再关闭节点流b。

可以只关闭处理流,不用关闭节点流。处理流关闭的时候,会调用其处理的节点流的关闭方法。

注意:

-如果将节点流关闭以后再关闭处理流,会抛出IO异常。

-如果关闭了处理流,在关闭与之相关的节点流,也可能出现IO异常。(hadoop编程文件流 *** 作中遇到了。)

帮你修改了一下代码。

你的问题有二。

一:流的打开和关闭应该注意先后顺序迅答,“先打开后关闭,后打开先关闭”

    先有fr,再有br。所以先关闭br,再关闭fr.

    先有fw,再有bw。所以先关闭bw,再关闭fw.

二:流的读写应该注意异常后也要关闭,防谈昌卖止出现含逗其他异常。就像下面我放到finally里面的。

public static void main(String[] args) throws IOException {

FileReader fr = null

BufferedReader br = null

FileWriter fw = null

BufferedWriter bw = null

try {

fr = new FileReader("D://myDoc//test.txt")

br = new BufferedReader(fr)

fw = new FileWriter("D://myDoc//test2.txt")

bw = new BufferedWriter(fw)

String line = br.readLine()

while (line != null) {

System.out.println(line)

bw.write(line)

line = br.readLine()

}

} finally {

bw.close()

br.close()

fw.close()

fr.close()

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12236943.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存