应该显式关闭BufferedReader和InputStreamReader吗?

mem*_*und 2 java inputstream bufferedreader java-8

我想把a的内容读InputStreamString:

private String readToString(InputStream stream) {
    return new BufferedReader(new InputStreamReader(stream))
            .lines().collect(Collectors.joining("\n"));
}
Run Code Online (Sandbox Code Playgroud)

流来自java.lang.Process.

问题:我是否必须明确关闭任何一个InputStream,InputStreamReader或者BufferedReader在这种情况下?

旁注:链接的问题不是重复的,因为我的问题是如何正确关闭流,而不是如何将流读取到字符串!

Eug*_*ene 6

你只需要关闭outer包装器,但不要明确地这样做 - 有一个try-with-resource可以让你的生活更轻松:

public String readToString(InputStream stream) {

    try (InputStreamReader reader = new InputStreamReader(stream);
            BufferedReader br = new BufferedReader(reader)) {

        return br.lines().collect(Collectors.joining("\n"));

    } catch (IOException e) {
        e.printStackTrace();
        throw new RuntimeException(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

还有一种简单的方法可以做到这一点并且更清晰:

Files.readAllLines(YourPath)
Run Code Online (Sandbox Code Playgroud)