如何使用Java读取目录中所有文本文件的内容?

问题描述

我的问题是我想使用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循环,因为它应该可以这样工作。