【问题标题】:SubFolders not showing text files - JAVA子文件夹不显示文本文件 - JAVA
【发布时间】:2021-03-21 06:40:22
【问题描述】:

所以我试图通过从文件夹[主文件夹名为出勤]中读取文本文件(所有文件都填充学生姓名)来让学生出勤,该文件夹有 2 个子文件夹,我的程序是没有显示任何文本文件,下面是我创建文件的代码,其中保存了主文件夹的路径,然后创建了一个列表来存储所有文件:

 File folder = new File("C:\\Users\\HP\\IdeaProjects\\AdaptiveJava\\src\\StudentAttendance\\Attendance");
 List<File> allFiles = Arrays.asList(folder.listFiles());

所以我有一种方法可以打印主文件夹中的所有文本文件:

  public static void printFileNames(List<File> fileList){
        for(int i = 0; i < fileList.size();i++){
            if(fileList.get(i).isFile()){
                System.out.println(fileList.get(i).getName());
            }
        }
    }

但没有打印任何东西,但是当我将文件路径更改为例如

File folder = new File("C:\\Users\\HP\\IdeaProjects\\AdaptiveJava\\src\\StudentAttendance\\Attendance\\SubFolder1");

它打印子文件夹内的所有文本文件,反之亦然。 我在这里做错了什么?如何从子文件夹中读取多个文本文件?

【问题讨论】:

    标签: java file directory filereader subdirectory


    【解决方案1】:

    您还应该列出子文件夹中的文件,方法listFiles() 仅列出与您所在文件夹相关的文件,因此您可以遍历第一个文件列表,然后列出每个子文件夹的文件,这是一种使用 java 8 流的方法:

    List<File> allFiles = Arrays.stream(folder.listFiles())
                    .filter(File::isDirectory)
                    .flatMap(f -> Arrays.stream(f.listFiles()))
                    .collect(Collectors.toList());
    

    您也可以使用 for 来遍历第一个 listFiles 调用的结果,并为每个文件调用该方法,首先询问它是否是一个目录,如下所示:

            List<File> allFiles = new ArrayList<>();
            for (File f : folder.listFiles()) {
                if (f.isDirectory()) {
                    allFiles.addAll(Arrays.asList(f.listFiles()));
                }
            }
    

    【讨论】:

    • 非常感谢!只是碰巧我的代码有点乱,哈哈,感谢您添加迭代方法
    • @Lumgashi 欢迎您,如果我的回答有帮助,您可以将问题标记为已回答,问候。
    【解决方案2】:

    您的代码应该可以工作。如果我使用以下代码,它将打印当前工作目录的子文件夹 filesToPrint 中的所有文件名。

    package test.print.files;
    
    import java.io.File;
    import java.util.Arrays;
    import java.util.List;
    
    public class PrintFiles
    {
    
       public static void main(String[] args)
       {
          File folder = new File("./filesToPrint");
          List<File> allFiles = Arrays.asList(folder.listFiles());
          printFileNames(allFiles);
       }
    
       public static void printFileNames(List<File> fileList)
       {
          for (int i = 0; i < fileList.size(); i++)
          {
             if (fileList.get(i).isFile())
             {
                System.out.println(fileList.get(i).getName());
             }
          }
       }
    
    }
    

    示例目录:

    c:\filesToPrint\file1.txt
                    file2.txt
    

    输出:

    file1.txt
    file2.txt
    

    【讨论】:

    • 你说的很对,看来我的代码有误,非常感谢
    猜你喜欢
    • 2010-10-28
    • 2013-10-14
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    相关资源
    最近更新 更多