为什么try / catch块需要括号BufferedWriter

时间:2012-12-18 04:33:59

标签: java io try-catch bufferedwriter

我正在使用java.io.BufferedWriter编写一些代码 我尝试的第一件事是:

    String filename = new String("test.txt");
    Charset charset = new Charset("US-ASCII");
    try {
        BufferedWriter bw = Files.newBufferedWriter(Paths.get(filename), charset);
        bw.write("hello");
    } catch (IOException e) {
        System.out.println(e);
    }

输出一个空的test.txt 看到一个例子,按照以下格式,我试过:

    String filename = new String("test.txt");
    Charset charset = new Charset("US-ASCII");
    try (BufferedWriter bw = Files.newBufferedWriter(Paths.get(filename), charset)){
        bw.write("hello");
    } catch (IOException e) {
        System.out.println(e);
    }

输出第一行“hello”的文本文件。 这种形式意味着什么,为什么它在我第一次尝试时没有用呢?

2 个答案:

答案 0 :(得分:5)

这在Java 7中称为“try-with-resources”,如果您将其修复为

,您的BufferedWriter将自动关闭
    try (BufferedWriter bw = Files.newBufferedWriter(Paths.get("filename"), StandardCharsets.US_ASCII)) {
        bw.write("hello");
    }

请参阅http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

答案 1 :(得分:1)

1-st选项在语法上是正确的。

我想你错过了

bw.close(); 
完成写作后

  

关闭流,先冲洗它。