java - 如何保证一个I/O流的关闭?

标签 java io

考虑这个函数:

import java.io.IOException;
import java.io.Reader;

class StreamPrinter {

    void print(Reader reader) throws IOException {
        int code = reader.read();
        while (code != -1) {
            System.out.print((char) code);
            code = reader.read();
        }

        reader.close();
    }

}

出现异常和错误时如何关闭流?

最佳答案

正如发布的那样,您可以使用 finally block ,例如

void print(Reader reader) throws IOException {
    try {
        int code = reader.read();
        while (code != -1) {
            System.out.print((char) code);
            code = reader.read();
        }
    } finally {  
        reader.close();
    }
}

此外,编写 while 循环的更惯用方法类似于

void print(Reader reader) throws IOException {
    int code;
    while ((code = reader.read()) != -1) {
        System.out.print((char) code);
    }
}

然后使用调用者的try-with-resources;喜欢

try (Reader reader = ...) {
    print(reader);
}

关于java - 如何保证一个I/O流的关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52238587/

相关文章:

Java 正则表达式无法工作,但 javascript 可以工作

java - `InputStream`和 `Reader`本质上是相同的, `OutputStream`和 `Writer`本质上是相同的吗?

JavaFX:TableView 使用 ObservableList 中的特定数据填充列

java - 解决org.springframework.data.mapping.PropertyReferenceException : No property getOne found for type MyLog

java - 在 Apache Spark 中解析 XML 数据

java - 如何在 Java 8 中使用流将 EntrySet 拆分为映射

c++ - 帮助异步 I/O

C程序将空格分隔的输入字符串转换为int数组

c++ - 如何以二进制而不是十六进制打印到我的文件

python - 将 FORTRAN90 文件生成的数据读入 NUMPY 数组