我应该使用close或closeQuietly来关闭输出流吗?

Mr *_*ain 8 java outputstream

当我们需要关闭输出流时,我们有两个选择.

  1. closeQuietly意味着关闭一个流,没有异常抛出.

    try {
        close(out)
    } catch(IOException e) {
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. try {
        close(out)
    } catch(IOException e) {
        throw anException;
    }
    
    Run Code Online (Sandbox Code Playgroud)

众所周知,输出流会在关闭时将一个/几个字符写入文件末尾,如果这些写入错误,文件也无法正确打开,如ZipoutputStream.

如果我使用第一个,我将有一些失败的风险.如果我使用第二个,它会让我的代码不友好.

有人可以给我一些建议吗?

很抱歉没有明确地描述这个问题.

我的意思是如何安全地进行IO操作.如果资源的发布失败,它将让调用者知道.

谢谢你的所有答案.特别感谢@Don Roby给我一个包含@Fabian Barney回答的最佳答案的链接

Evg*_*eev 12

由于Java 7 IOUtils.closeQuietly已经过时,唯一合理的解决方案是try-with-resources自动关闭资源

try (InputStream is = new FileInputStream(file)) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

请注意,它还解决了正确打开/关闭多个资源的问题

try (InputStream is = new FileInputStream(infile); OutputStream out = new FileOutputStream(outfile)) {
   ...          
}
Run Code Online (Sandbox Code Playgroud)

并且它也不会抑制close()可能抛出的IOException ,这正是closeQuietly它所做的.