我将为物理学生进行一场有关Java的讲座,我想知道如何正确地打开一个文件。
在我的许多专业应用程序中,我做了类似以下的事情:
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("file")));
try{
....
}finally {
bufferedWriter.close();
}
在我看来,这是可以的,也就是说,读取器总是会被关闭。
当我为学生们制作这个示例时,我想知道如果InputStreamReader
的构造函数抛出异常会发生什么 --- FileInputStream
将保持打开状态,但是它不会被我的代码关闭(因为这些对象是在try-finally块之外创建的)。
所以这是正确的惯用法吗?如果是,那么为什么?如果打开流不是正确的惯用法,请指出正确的方式!
编辑:我正在寻找既正确又非常容易编写和理解的习惯用法,物理学生是编程初学者。
编辑:真傻我复制了错误的示例 --- 如果使用写入器而不是阅读器,则会变得更加复杂。
BufferedReader buf = null
只是为了更明确) - Jason SInputStreamReader
抛出异常,这不会关闭流。此外,因为buf
可能为null
,所以最终会导致另一个NullPointerException
。 - NeetIOException
,你真的想要刷新吗? - Johan Sjöberg