Java FileFilter 不显示任何具有过滤 .mp3 扩展名的输出

Java FileFilter Doesn't Show Any Output With Filtering .mp3 Extension

我想从名为 "E:\MUSICS COLLECTION" 的路径中过滤所有 mp3 文件,其中 MUSICS COLLECTION 文件夹下有一些子文件夹。

但是,当我 运行 代码时,它没有显示任何输出。不知道主要问题在哪里

代码

import java.io.*;

public class Music2 {
public static void main(String[] args) throws IOException {
   File home = new File("E:\MUSICS COLLECTION");

   FileFilter mp3Filter = new FileFilter() {
       @Override
       public boolean accept(File pathname) {
           String fileName = pathname.getName();
           if(fileName.endsWith(".mp3")){
               return true;
           }
           return false;
       }
   };
   
   File[] listRoots = home.listFiles(mp3Filter);
   for(File file : listRoots){
       System.out.println(file.getPath());
   }
  }
}

由于您希望查找也发生在子文件夹中,因此您应该遍历文件树

下面的代码应该做到这一点

public static void main(String[] args) {

    List<Path> result;
    try (Stream<Path> walk = Files.walk(Path.of("E:\MUSICS COLLECTION"))) {
        result = walk.filter(Files::isRegularFile).filter(file -> file.getFileName().toString().endsWith(".mp3"))
                .collect(Collectors.toList());
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
    result.forEach(out::println);
}

P.S: Files.walk(Path.of("E:\MUSICS COLLECTION")) 在 java 中不起作用 8 改用 Files.walk(Paths.get("E:\MUSICS COLLECTION"))

如果您不想按照@HariHaravelan 的回答中的描述手动遍历文件树(无论出于何种原因),Apache Commons IO's FileUtils 来救援:

File home = new File("E:\MUSICS COLLECTION");
Collection<File> mp3Files = FileUtils.listFiles(home, new String[] {"mp3"}, true);
mp3Files.forEach(System.out::println);