gpt4 book ai didi

java - 如何在 Java 中关闭嵌套 I/O 流

转载 作者:行者123 更新时间:2023-12-01 20:21:45 28 4
gpt4 key购买 nike

我有以下代码:

try{
fileOutputStream = new FileOutputStream(downloadFile1);
outputStream1 = new BufferedOutputStream(fileOutputStream);

boolean success = ftpclient.retrieveFile(completePath.get(i), outputStream1);

if (success) {
System.out.println(completePath.get(1)+" downloaded!");
}
}finally {
if (outputStream1!=null) outputStream1.close();
if(fileOutputStream!=null) fileOutputStream.close();

}

IntelliJ 给出错误,指出 FileOutputStream 也需要关闭。

而如果我更改finally block 中的流关闭顺序

  finally {  
if(fileOutputStream!=null) fileOutputStream.close();
if (outputStream1!=null) outputStream1.close();
}

然后没有错误,但文件没有完全下载,因为流已提前关闭。

有人可以建议正确的方法吗?

最佳答案

close method 的文档BufferedOutputStream(继承自 FilterOutputStream)说

The close method of FilterOutputStream calls its flush method, and then calls the close method of its underlying output stream.

所以 IntelliJ 显然是错误的。如果有疑问,请相信文档,而不是 IDE 的警告 - 它们是警告,而不是有原因的错误。

也就是说,您应该使用 try-with-resources声明。

而且您也不需要中间变量,您可以构造 FOS 并立即将其作为参数传递给 BOS 构造函数。

关于java - 如何在 Java 中关闭嵌套 I/O 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44594521/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com