(这几天想写一个Android音乐播放器,在解决如何解码音频文件后,我又遇到如何查找手机中的音频文件的问题。今天上网搜索了一下各种技术博客,找到了几种实现方法。想着记录下来,方便以后查看,也给有同样疑问的网友提供一个参考)
———————————————————————————分割线————————————————————————————————————————————————
正式开始:
一、实现文件夹遍历需要的背景知识:
了解File类
二、背景知识
File类
构造方法:
a.通过给定的父抽象路径名和子路径名字符串创建一个新的File实例。
File(File parent, String child);b. 通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例
File(String pathname)
a.测试此抽象路径名表示的文件是否是一个标准文件。
public boolean isFile()
b.测试此抽象路径名表示的文件是否是一个目录。
public boolean isDirectory()
c.返回一个抽象路径名数组,这些路径名表示此抽象路径名所表示目录中的文件。
public File[] listFiles()
d.返回此抽象路径名的父路径名的路径名字符串,如果此路径名没有指定父目录,则返回 null
。
public String getParent()
e.返回抽象路径名的绝对路径名字符串。
public String getAbsolutePath()
三、遍历的实现
下面我将用递归实现对文件夹的遍历,并输出满足条件的文件名称(本例中指定为mp3文件)
(下面给出源码,有了基础知识,相信大家能看懂,我就不解释了。)
<pre name="code" class="java">import java.io.File;
public class SearchFile{
public static void findFileByEndStr(String dirStr, String str) {
// 用dirStr创建一个File对象,指向你要查找的文件夹。请确保dirstr是有效的路径,如d:/music
File dir = new File(dirStr);
// 得到dir目录中的全部文件、文件夹的路径
File[] files = dir.listFiles();
for (File file : files) {
//筛选出符合要求的文件,并输出文件名,和路径
if (file.isFile() && file.toString().endsWith(str)) {
System.out.println("fileName:" + file.getName() + "----->" + file.getAbsolutePath());
}
//递归调用
if (file.isDirectory()) {
findFileByEndStr(file.toString(), str);
}
}
}
public static void main(String[] args) {
findFileByEndStr("d:/music",".mp3");
}
}
四、结果
源码:
结果:
从上图可以看出:music目录下有两个mp3文件,一个在d:\music目录里,里一个在d:\music\song目录中
这个我的目录结果一样。