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);
我想从名为 "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);