gpt4 book ai didi

java - 有没有一种快速的方法可以使用 java 获取设备上的所有音频文件?

转载 作者:行者123 更新时间:2023-12-03 00:23:39 34 4
gpt4 key购买 nike

初级 Java 程序员在这里。我正在尝试制作一个简单的 mp3我的 Mac(最终是 Android)上的播放器,我想让它自动识别您设备上已经存在的所有音乐(mp3)。
我有一个简单的 for 循环设置,它从主目录开始,遍历所有其他目录以查找 mp3s .我还没有看到它完成循环,因为我总是不得不强制停止它,因为它持续了很长时间。我可以排除一些文件夹,因为在其中放置音乐没有意义,但我觉得有更好的方法。
有没有比 for 更快和/或更有效的其他方法?环形?
我也很好奇mac中的finder是如何工作的。例如,当我使用查找器查找所有 mp3我的 mac 上的文件,结果只需要几秒钟就可以显示出来,我只需要输入一些搜索条件。如果有人能指出我如何完成与此类似的事情,那就太好了,我会接受我能得到的任何意见!

public static void findAudio(File currentDir) {
File[] filesInDir = currentDir.listFiles();
if (filesInDir != null){
if (filesInDir.length == 0){
return;
}
else {
for (File file : filesInDir) {
if (!file.isHidden()) {
if (file.isDirectory()) {
findAudio(file);
}
if (file.canRead()) {
if (file.getName().endsWith(".mp3")) {
System.out.println(file.getPath());
}
}
}
}
}
}
else {
System.out.println(currentDir.getPath() + " is null -- skipping");
}
}

最佳答案

首先,检查文件扩展名比检查文件是否可读花费更少的时间。
此外,您可以使用 Files.walkFileTree为此在 Java 8 中添加了方法。
oracle 网站上有一个关于如何使用它的教程:https://docs.oracle.com/javase/tutorial/essential/io/walk.html
代码看起来像这样:

Files.walkFileTree(Paths.get(sourcePath), new SimpleFileVisitor<>() {
@Override
public FileVisitResult visitFile(Path filePath, BasicFileAttributes attrs) {
if (filePath.toString().endsWith(".mp3") && filePath.toFile().canRead()) {
System.out.println(filePath.toString());
}
return FileVisitResult.CONTINUE;
}

@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) {
System.err.println("Failed reading \"" + file.toString() + "\" -- skipping");
return FileVisitResult.CONTINUE;
}
});
SimpleFileVisitor类是 FileVisitor 的简化实现具有默认行为的接口(interface)以访问所有文件并重新引发 I/O 错误。
如果出现 I/O 错误,我们仅将文件路径打印到默认错误流并继续文件处理。
如果没有错误,文件扩展名是“.mp3”(如上所述首先检查扩展名),并且文件是可读的,我们将文件路径打印到默认输出流(您也可以做其他事情,例如将其添加到媒体文件列表)

关于java - 有没有一种快速的方法可以使用 java 获取设备上的所有音频文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63423781/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com