问题:得到指定目录以及子目录下指定后缀名的文件,这里是得到sql文件
项目文件结构是这样式的
比如我传参F:/sql 需要得到所有文件夹中的sql文件。
解决方案:
用到了FilenameFilter 以及 递归。
首先我们实现FilenameFiltre接口,重写accept方法
import java.io.File;import java.io.FilenameFilter;
public class SqlFileFilter implements FilenameFilter {
@Override
public boolean accept(File dir, String name) {
if (dir.isDirectory())
return true;
if (name.toLowerCase().endsWith(".sql"))
return true;
else
return false;
}
}
再者,我们写一个通用的递归调用方法
public static List<File> listFile(File dir, FilenameFilter ff,boolean recursive) {
List<File> list = new ArrayList<File>();
File[] files = dir.listFiles(ff);
if (files != null && files.length > 0) {
for (File f : files) {
// 如果是文件,添加文件到list中
if (f.isFile()) {
list.add(f);
}
// 获取子目录中的文件,添加子目录中的经过过滤的所有文件添加到list
else if (recursive) {
list.addAll(listFile(f, ff, true));
}
}
}
return list;
}
其中第三个参数表示是否递归。
测试:
public static void main(String[] args) {File file = new File("F:/javaresource/checktools/sql/");
List<File> files = listFile(file, new SqlFileFilter(), true);
for (File s : files) {
System.out.println(s);
}
}
结果:
还没有评论,来说两句吧...