问题描述
我的问题是我想使用Java遍历目录中的所有文本文件,但是每当我开始 for 遍历文件时,它总是导致一半的处理,例如: 80个文件,我想读取每个文件的内容,然后开始循环,它仅执行文件的后半部分。
Note: I have tried FileInputStream,Scanner class,BufferedReader as well. In FileInputStream,it gives EOFException and half-iteration results for other two methods.
这是我的代码-
package InputFiles;
import java.io.*;
import java.util.Scanner;
public class FileInput {
public static void main(String[] args) {
File folder=new File("C:\\Users\\erpra\\Downloads\\SomePath");
File[] listofFiles=folder.listFiles();
BufferedReader br=null;
try {
for(File tempFile:listofFiles){
System.out.println(tempFile.getName());
br=new BufferedReader(new FileReader(tempFile));
String str;
while ((str=br.readLine())!=null){
System.out.println(str);
}
}
}catch (IOException e){
e.printstacktrace();
}finally {
try {
br.close();
}catch (IOException e){
e.printstacktrace();
}
}
}
}
解决方法
您的代码似乎对我有用,但我建议以不同方式管理FileReader和BufferedReader:
public static void main(String[] args) {
File folder=new File("C:\\Users\\erpra\\Downloads\\SomePath");
File[] listOfFiles=folder.listFiles();
try {
for (File tempFile : listOfFiles) {
System.out.println(tempFile.getName());
try (FileReader fr = new FileReader(tempFile);
BufferedReader br = new BufferedReader(fr);)
{
String str;
while ((str = br.readLine()) != null) {
System.out.println(str);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
通过使用try-with-resources,每个FileReader和BufferedReader都将在try块结尾处正确关闭。您只关闭最后一个阅读器。
但是您可以看到,我没有更改while循环,因为它应该可以这样工作。