如何关闭Java Formatter,最终与否?

时间:2016-06-10 12:30:19

标签: java-6 formatter finally resource-leak

我知道Java中的streamsformatters(特别是java.util.Formatter)通常应在finally中关闭以避免资源泄漏。但在这里我有点困惑,因为我看到很多例子,人们只是关闭它而没有任何最终阻止,特别是格式化程序。这个问题可能对某些人没有意义,但我想确定我所询问的内容。 来自java2s.comtutorialspoint.com的一些示例,其中格式化程序只是在没有任何块的情况下关闭。
请考虑我的问题仅适用于Java 6及更低版本,因为我知道尝试使用资源。

示例:

public static void main(String[] args) {


  StringBuffer buffer = new StringBuffer();
  Formatter formatter = new Formatter(buffer, Locale.US);

  // format a new string
  String name = "from java2s.com";
  formatter.format("Hello %s !", name);

  // print the formatted string
  System.out.println(formatter);

  // close the formatter
  formatter.close();

  // attempt to access the formatter results in exception
  System.out.println(formatter);
}

2 个答案:

答案 0 :(得分:2)

在此特定示例中,无需致电close()。如果底层附加程序为Closable,则只有需要才能关闭格式化程序。在这种情况下,您使用的StringBuffer不是Closable,因此对close()的调用不执行任何操作。如果您使用WriterPrintStream,那么这些内容可以关闭,并且必须调用close()以避免让流畅通。

如果您不确定是Closable,最好还是致电close()。这样做没有坏处。

答案 1 :(得分:0)

如何做到这一点,没有进一步的评论:

public static void main(String[] args) {
  StringBuffer buffer = new StringBuffer();
  Formatter formatter = null;
  try {
    formatter = new Formatter(buffer, Locale.US);
    String name = "from java2s.com";
    formatter.format("Hello %s !", name);
    System.out.println(formatter);
  }
  finally {
    if (formatter != null) {
      formatter.close();
    }
  }
}