gpt4 book ai didi

java - 在 Java 中打开流的正确方法是什么

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:22:53 24 4
gpt4 key购买 nike

我要为物理专业的学生讲授 Java,我想知道如何正确打开文件。

在我的许多专业应用程序中,我都做了类似的事情:

  BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("file")));
try{
....
}finally {
bufferedWriter.close();
}

恕我直言,即阅读器将始终关闭。

当我把它作为我的学生的例子时,我想知道如果 InputStreamReader 的构造函数抛出异常会发生什么——FileInputStream 将打开,但它不会被我关闭代码(因为这些对象是在 try-finally block 之外创建的。

那么这是正确的成语吗?如果是,那为什么?如果开流的成语不对,请指点我正确的!

编辑:我正在寻找既正确又非常易于编写和理解的成语,物理专业的学生是编程的初学者。

编辑:愚蠢的我,我复制了错误的示例 --- 如果我使用 Writers 而不是 Readers,它会变得更加复杂。

最佳答案

读取输入流

在 Java 7 之前,你会这样做

InputStream in = null;
try {
in = new FileInputStream("simple.csv");
BufferedReader buf = new BufferedReader(new InputStreamReader(in));
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {}
}
}

对于 Java 7,您可以使用 Closeable , 像

try (BufferedReader buf = new BufferedReader(...)) {}

编辑: 为什么我没有关闭上面的 buf?查看 BufferedReader.close() 的源代码

public void close() throws IOException {
synchronized (lock) {
if (in == null)
return;
in.close();
in = null;
cb = null;
}
}

用输出流写

编辑 2:同样的原则适用于作家。但是,如果您真的对在 IOException 发生时刷新流感兴趣,那么您必须检查 writerstream null 并尝试分别关闭它们。尽管如此,还是提供了很多额外的代码。它可能看起来像这样:

BufferedWriter buf = null;
OutputStream out = null;
try {
out = new FileOutputStream("file");
buf = new BufferedWriter(new OutputStreamWriter(out));
} finally {
if (buf != null) {
try { buf.close(); } catch (IOException ex){}
}
if (out != null) {
try { out.close(); } catch (IOException ex){}
}
}

不是很漂亮。您可以引入一个帮助程序来关闭您的流或查看 Java 7 或 Apache IOUtils

关于java - 在 Java 中打开流的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9959326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com