java

7fyelxc5  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(377)

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

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

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

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

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

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

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

nkkqxpd9

nkkqxpd91#

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

  1. package test.print.files;
  2. import java.io.File;
  3. import java.util.Arrays;
  4. import java.util.List;
  5. public class PrintFiles
  6. {
  7. public static void main(String[] args)
  8. {
  9. File folder = new File("./filesToPrint");
  10. List<File> allFiles = Arrays.asList(folder.listFiles());
  11. printFileNames(allFiles);
  12. }
  13. public static void printFileNames(List<File> fileList)
  14. {
  15. for (int i = 0; i < fileList.size(); i++)
  16. {
  17. if (fileList.get(i).isFile())
  18. {
  19. System.out.println(fileList.get(i).getName());
  20. }
  21. }
  22. }
  23. }

示例目录:

  1. c:\filesToPrint\file1.txt
  2. file2.txt

输出:

  1. file1.txt
  2. file2.txt
展开查看全部
aamkag61

aamkag612#

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

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

您还可以使用for来迭代第一个listfiles调用的结果,并对每个文件调用该方法,首先询问它是否是一个目录,如下所示:

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

相关问题