提问人:Sneh Raghav 提问时间:9/23/2020 更新时间:9/23/2020 访问量:131
如何使用Java读取目录下所有文本文件的内容?
How to read the content of all of the text files of a directory using Java?
问:
我的问题是我想使用 Java 迭代目录中的所有文本文件,但每当我开始循环文件时,它总是会导致一半的处理,例如:- 我有 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();
}
}
}
}
答:
0赞
Conffusion
9/23/2020
#1
您的代码似乎对我有用,但我建议以不同的方式管理 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循环,因为它应该以这种方式工作正常。
评论
0赞
Sneh Raghav
9/23/2020
感谢您提供此解决方案,但我再次遇到同样的问题。我不知道为什么它执行最后一个文件并忽略有关前 40 个文件的文件。
0赞
Conffusion
9/23/2020
你如何验证,也许你的输出缓冲区(屏幕控制台)没有显示eveything。如果您只打印文件名,而不是其内容,该怎么办?它打印所有文件吗?
0赞
Sneh Raghav
9/24/2020
我的控制台通过跳过前 40 个文件来显示一半的内容,然后执行后面的文件。是的,它也会打印文件名,但为了检索所有文本文件的内部内容,它失败了。这是由于 BufferReader 容量不足造成的吗?我可以向你展示输出显示,但它有点保密。
0赞
Conffusion
9/24/2020
通常,文件的大小对于*Reader来说并不重要,因为它的工作方式更像是浏览内容的光标。不需要查看文件的内容,但您能给出它们的大小和您拥有的文件数量吗?单行的最大大小是多少?例如,XML 格式可能只有一行。但是,如果这将是一个问题,我会期望出现 OutOfMemory 错误。我希望内容是文字。
0赞
Sneh Raghav
9/24/2020
是的,内容是文本格式。而且,现在我想做的事情终于完成了。我对这些文件数据应用了“写入”,并将其存储在一个单独的文本文件中,并成功写入了内容。但是,它仍然没有在控制台中显示所有数据,但现在没有必要在控制台中显示数据,因为我现在有一个单独的文件。所以,谢谢你的帮助!
评论