查询电脑中指定后缀的文件名字的方法如下图:
这里需要用到递归思想
思路大致如下:
1:判断参数是否为空或者不存在
2:利用File类中 方法:File[] listFiles() 获取当前目录下面所有的文件或者文件夹
3:判断文件夹和文件是否存在,如果存在就循坏。
4:如果是一个文件夹,就继续调用方法。如果不是文件夹则判断是否以指定的后缀结尾,是的话就直接打印
package wl.itsource.javase._01fIle._07;
import java.io.File;
import java.io.FileNotFoundException;
public class FileTest3 {
public static void main(String[] args) {
try {
File[] listRoots = File.listRoots();//获取电脑上所有的根目录
for (File file : listRoots) {
search(file, ".mp4"); //查询电脑上所有磁盘中,以mp4结尾的文件
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
}
}
/**
* @param file 查询的文件路径
* @param name 查询的后缀名字
* @throws FileNotFoundException 如果路径为找不到,抛出此异常
* @throws NullPointerException 如果路径下的内容为空,抛出此异常
*/
public static void search(File file,String name) throws FileNotFoundException,NullPointerException{
if (file==null) {//如果文件是空的,则抛出异常
throw new FileNotFoundException("未查询到此路径,请重新输入!");
}
if (!file.exists()) {//如果文件不存在
throw new NullPointerException("此路径不能是空,请重新输入!");
}
//获取跟目录下所有的文件和文件夹目录
File[] listFiles = file.listFiles();
if (listFiles!=null&&listFiles.length!=0) {
for (File file2 : listFiles) {
if (file2.isDirectory()) {//判断file2是否是一个文件夹,是文件夹就继续调自己方法
search(file2, name);// 继续调方法
}else {
if (file2.getName().endsWith(name)) {//判断文件名字,是不是以指定的路径结尾,是的话,就直接打印出来。
System.out.println(file2);
}
}
}
}
}
}
总结:先判断是不是文件夹,是文件夹就继续查询(递归思想)。查询方法很多,这里仅仅是一种而已。