问题:得到指定目录以及子目录下指定后缀名的文件,这里是得到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); } }
结果: