作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下代码:
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/
我是一名优秀的程序员,十分优秀!