【问题标题】:closing nested streams [duplicate]关闭嵌套流[重复]
【发布时间】:2011-09-29 00:50:24
【问题描述】:

可能重复:
Best way to close nested streams in Java?

我们如何关闭嵌套流?全部关闭?如果是,顺序是什么?

FileOutputStream out = new FileOutputStream("data.txt", true);
PrintWriter pout = new PrintWriter(out);

/* do some I/O */

pout.close();
out.close();

或关闭最外面的流将关闭所有流。

pout.close(); // Is this enough?

【问题讨论】:

    标签: java inputstream printwriter


    【解决方案1】:

    关闭链式流时,只需要关闭最外层的流即可。任何错误都会向上传播并被捕获。

    看看here。可能以前有人问过这个问题。

    【讨论】:

      【解决方案2】:

      始终使用finally 块关闭资源:

      acquire();
      try {
          use();
      } finally {
          release();
      }
      

      您在这里唯一的资源是FileOutputStream,所以它是唯一真正需要关闭的资源。如果要抛出 PrintWriter 构造函数,你真的应该释放 FileOutputStream,这样就不会关闭 PrintWriter

      注意,您确实想要flush PrintWriter。这只需要在非异常情况下完成,因此不需要finally。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-25
        • 1970-01-01
        • 1970-01-01
        • 2011-10-29
        • 2021-11-25
        • 2013-06-26
        相关资源
        最近更新 更多