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

  • closeQuietly意味着关闭流,没有异常抛出。
    try {
        close(out)
    } catch(IOException e) {
    }
    
  • 关闭
    try {
        close(out)
    } catch(IOException e) {
        throw anException;
    }
    

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

    如果使用第一个,则会有失败关闭的风险。
    如果使用第二个,它将使我的代码不友好。

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

    非常抱歉无法清楚地描述此问题。

    我的意思是如何安全地进行IO操作。如果资源释放失败,则会通知调用方。

    感谢您的所有答复。尤其要感谢@Don Roby给我的链接,其中包含@Fabian Barney回答的最佳答案

    最佳答案

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

    try (InputStream is = new FileInputStream(file)) {
        ...
    }
    

    请注意,它还解决了正确打开/关闭多个资源的问题
    try (InputStream is = new FileInputStream(infile); OutputStream out = new FileOutputStream(outfile)) {
       ...
    }
    

    而且它也不会抑制close()可能引发的IOException,这正是closeQuietly所做的。

    09-30 15:40
    查看更多