如何解决从方法返回时,BufferedReader关闭
我正在编写代码以读取文件并对其进行处理,并且将逻辑分为许多小的方法。因此,我有一种读取文件并返回BufferedReader的方法,还有一种用于对返回的BufferedReader对象进行逻辑处理的方法。但是,当我尝试在第二种方法中从BufferedReader对象读取行时,它却给了我[java.io.IOException:流关闭]。
我用来读取文件并返回BufferedReader的方法
private static BufferedReader readFile(String file) {
try (FileInputStream fileInputStream = new FileInputStream(file)) {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));
System.out.println(bufferedReader.readLine()); // this line is working successfully
return bufferedReader;
} catch (FileNotFoundException fileNotFoundException) {
fileNotFoundException.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
有什么想法为什么会发生以及如何解决?
解决方法
您正在使用try-with-resources:
try (FileInputStream fileInputStream = new FileInputStream(file)) {
此行正在创建一个FileInputStream
,可在您的try
块内使用。离开try
块后,close()
方法将被调用到流中。因此,如果您返回流或其BufferedReader
,该流将已经关闭。您不应该使用try-with-resources甚至更好的方法,从流而不是流本身返回所需的任何内容。
显然,这里的问题在于使用try-with-resources和AutoCloseable接口。但是,我想指出的是,您读取文件的方式是“过时的”方式。现在,我们有了Files,Paths和Stream类,以方便读取文件。这使用Java NIO,返回一个Stream,总体上更好:
Files.lines(Paths.get(pathToFile))
此外,这里无需关闭任何内容
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。