从Java中的多个文件夹中读取多个txt文件

时间:2018-08-26 08:03:31

标签: java file text-files

这是我计算机中的数据结构。

amdar(folder) / 20141125(folder) / 300++ txt files
              / 20141126(folder) / 300++ txt files
              / 20141127(folder) / 300++ txt files ...
              / 20141128(folder) / 300++ txt files ...
              / 20141129(folder) / 300++ txt files ...
             ... daily folders are added on and on ...   `

我想使用Java读取每个文件夹以及300 ++ txt文件。为此,我使用了两个循环:一个循环用于文件夹,另一个循环用于文件夹的txt文件。首先,该文件夹的for循环效果很好。 txt文件的第二个嵌套for循环出错。文件夹从20141125开始,而读取的txt文件从20141128文件夹中的某个位置开始;文件夹中的txt文件太多:20141125〜20141128未读取。请查看下面的屏幕截图。

[Screenshot: Why are the txt files from the 20141125 folder not shown first and even not shown at all?]

为解决此问题,我尝试使用while和分离的方法,而不是嵌套的for循环,但结果(错误)是相同的,而不是从起始文件夹开始读取。根据以下代码,我找不到导致此问题发生的任何原因。你能解释为什么吗?谢谢。

    public static void main(String[] args) {
        File dir = new File("c:\\html_test\\amdar");
        File[] folder = dir.listFiles();
            for(File table : folder) {
                System.out.println(table);
                File[] filenames = table.listFiles();
                    for (File file : filenames) {
                        System.out.println(file);
                    }
            }
    }

2 个答案:

答案 0 :(得分:1)

Right click on the console > Preferences > Console buffer size.
> Uncheck the "Limit console output" checkbox.

我的代码没有错误。

结果只是被截断了80000个字符限制。

我释放了限制,并得到了预期的结果。

答案 1 :(得分:0)

Code written for to read multiple test files from multiple folder: 
In the try block the FileReader reads a file and the second works as a constructor parameter and has a readline() method.


    public static void main(String[] args) {
            String dir = "c:\\html_test\\amdar";
        File dir = new File(dir);
            File[] folder = dir.listFiles();

        for(File table : folder) {
        if(table.isFile())
        {  
            BufferedReader inputStream = null;      
        try{
            inputStream = new BufferedReader(new FileReader(f));
            String line;
            while ((line = inputStream.readLine()) != null) 
             {
               System.out.println(line);
              }

            }  
             finally {
                        if (inputStream != null) {
                        inputStream.close();
                        }           

                     }
        }
              }
    }