首页 > 解决方案 > Listing all files with a .txt extension recursively

问题描述

I am trying to recursively search the directory and list all .txt files found. This is my code for it:

private static void listFilesForFolder(File folder) throws FileNotFoundException {
for (final File fileEntry : folder.listFiles()) {
        if (fileEntry.isDirectory()) {
            listFilesForFolder(fileEntry);
        } else {
            System.out.println(Arrays.toString(fileEntry.listFiles(new FileFilter() {
                @Override
                public boolean accept(File pathname) {
                    return pathname.getName().endsWith(".txt");
                }
            })));
        }
    }
}

I'm using FileFilter to print out all the .txt files but it prints out null instead. Anyone know why that's the case?

标签: javafilefilefilter

解决方案


我认为您可以简单地使用语句,而不是FileFilter在块中使用 a 。因为在这个块中你总是有一个文件(不是目录)。查看以下更改是否适合您。elseifelse

private static void listFilesForFolder(File folder) throws FileNotFoundException
{
  for (final File fileEntry : folder.listFiles()) {
    if (fileEntry.isDirectory()) {
      listFilesForFolder(fileEntry);
    } else {
      if (fileEntry.getPath().toLowerCase().endsWith(".txt")) {
        System.out.println(fileEntry.getPath());
      }
      /*System.out.println(Arrays.toString(fileEntry.listFiles(new FileFilter() {
        @Override
        public boolean accept(File pathname) {
          return pathname.getName().endsWith(".txt");
        }
      })));*/
    }
  }
}

编辑:
如果你真的想这样做FileFilter,你可以这样做:

private static void listFilesForFolder2(File folder) throws FileNotFoundException
{
  File[] textFiles = folder.listFiles(new FileFilter() {
    @Override
    public boolean accept(File pathname) {
      return pathname.isFile() && pathname.getName().toLowerCase().endsWith(".txt");
    }
  });
  if (textFiles != null) {
    for (File f : textFiles) {
      System.out.println(f.getPath());
    }
  }

  for (final File fileEntry : folder.listFiles()) {
    if (fileEntry.isDirectory()) {
      listFilesForFolder2(fileEntry);
    }
  }
}

推荐阅读