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

jam*_*meh 2 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);
    }
Run Code Online (Sandbox Code Playgroud)

输出一个空的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);
    }
Run Code Online (Sandbox Code Playgroud)

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

Evg*_*eev 5

这在Java 7中称为"try-with-resources",如果您将其修改为BufferedWriter,它将自动关闭

    try (BufferedWriter bw = Files.newBufferedWriter(Paths.get("filename"), StandardCharsets.US_ASCII)) {
        bw.write("hello");
    }
Run Code Online (Sandbox Code Playgroud)

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