本工具类主要是用于获取文件夹中指定文件后缀名的所有文件路径,适用于批量操作文件夹内同类型文件的情况,我这文字表述可能不太好理解,小伙伴们可以先向下翻看我的测试记录进行理解。
工具类代码如下:
package com.test.utils;
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;
/**
* 遍历文件夹工具类
*/
public class GetFileNameList {
/**
* 根据文件目录及文件后缀名获取文件列表
* @param folder 文件所在目录
* @param keyWord 文件后缀名
* @return File[] 文件列表
*/
public static File[] searchFile(File folder, final String keyWord) {// 递归查找包含关键字的文件
File[] subFolders = folder.listFiles(new FileFilter() {// 运用内部匿名类获得文件
@Override
public boolean accept(File pathname) {// 实现FileFilter类的accept方法
if (pathname.isDirectory()
|| (pathname.isFile() && pathname.getName()
.toLowerCase()
.contains(keyWord.toLowerCase())))// 目录或文件包含关键字
return true;
return false;
}
});
List<File> result = new ArrayList<>();// 声明一个集合
for (int i = 0; i < subFolders.length; i++) {// 循环显示文件夹或文件
if (subFolders[i].isFile()) {// 如果是文件则将文件添加到结果列表中
result.add(subFolders[i]);
} else {// 如果是文件夹,则递归调用本方法,然后把所有的文件加到结果列表中
File[] foldResult = searchFile(subFolders[i], keyWord);
for (int j = 0; j < foldResult.length; j++) {// 循环显示文件
result.add(foldResult[j]);// 文件保存到集合中
}
}
}
File files[] = new File[result.size()];// 声明文件数组,长度为集合的长度
result.toArray(files);// 集合数组化
return files;
}
/**
* 根据文件目录及文件后缀名获取文件名列表
* @param mir 文件所在目录
* @param str 文件后缀名
* @return String[] 文件名列表
*/
public static String[] getFileNameList(String mir, String str){
File folder = new File(mir);// 默认目录
if (!folder.exists()) {// 如果文件夹不存在
System.out.println("目录不存在:" + folder.getAbsolutePath());
return null;
}
File[] result = searchFile(folder, str);// 调用方法获得文件数组
String[] filename = new String[result.length];
for (int i = 0; i < result.length; i++) {
File file = result[i];
if(file != null || file.length()!=0 ){
filename[i] = file.getAbsolutePath();
}
}
return filename;
}
}
以下是我的测试记录,可参考:
在D盘test文件夹有如下文件:(注意看红框)
使用本工具类获取所有txt文件的测试main方法如下:
public static void main(String[] args) {
String path = "D:\\test";
String[] list = getFileNameList(path, ".txt");
//遍历输出文件名
for (String string: list) {
System.out.println(string);
}
}
测试结果如下,即文件夹内所有txt文件的文件路径就都获取到了,xlsx文件被过滤掉了。