package xianChengSaomiao; import java.io.File; import java.util.ArrayList; import java.util.List; public class Test6 { /** * @param args * 用线程实现快速扫描指定路径满足筛选条件的文件 * * * 对半拆分,按照一定的规律拆分得到的数据, 再将拆分后的数据进行处理 */ public static void path(File file) { // 解决空指针问题 if (file.listFiles(new MyFilenameFilter()) != null) { // 筛选符合的文件 File files[] = file.listFiles(new MyFilenameFilter()); // 遍历文件集合,并输出 for (File f : files) { System.out.println(f); } // 记录当前路径下的所有文件夹 String[] path = file.list(); if (path.length > 0) { for (String url : path) { // 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。 File fil = new File(file, url); // 如果是文件夹就继续深入检索 if (fil.isDirectory()) { // 递归处理 path(fil); } } } } } public static void main(String[] args) { // TODO Auto-generated method stub // 创建指定目录的文件对象 File file = new File("f:\"); // 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。 File files[] = file.listFiles(); // 创建集合来添加文件夹 List<File> url = new ArrayList<File>(); // 遍历集合 for (File f : files) { // 判断是否是文件夹,如果是就将文件夹添加到集合 if (f.isDirectory()) { // 判断是否是隐藏文件夹,如果不是就添加到集合 if (!f.isHidden()) { url.add(f); } } else { if (!f.isHidden()) { System.out.println(f); } } } // 拆分文件夹集合, // 首先得到集合长度 int longList = url.size(); int x, y; // 目前是手动开启线程,开启两个,所以判断两次 if (longList % 2 == 0) { x = y = longList / 2; } else { x = longList / 2; y = longList / 2 + 1; } // 将集合转拆分为数组 // 定义和集合一样长的数组进行数据的接收 File[] fil = new File[longList]; int index = 0; // 遍历集合并向数组中添加元素 for (File f : url) { fil[index] = f; index++; } // 定义指定长度的数组 final File[] file_1 = new File[x]; final File[] file_2 = new File[y]; // 向分里出来的数组拷贝数据 System.arraycopy(fil, 0, file_1, 0, file_1.length); System.arraycopy(fil, file_1.length, file_2, 0, file_2.length); //开启线程 new Thread() { public void run() { System.out.println(this.getName()); for (File f : file_1) { if (f.isDirectory()) { path(f); } else { System.out.println(f); } } } }.start(); new Thread() { public void run() { System.out.println(this.getName()); for (File f : file_2) { if (f.isDirectory()) { path(f); } else { System.out.println(f); } } } }.start(); } }
package test; import java.io.File; import java.io.FilenameFilter; //实现FilenameFilter接口,可用于过滤器文件名 //本方法实现的是筛选指定格式结尾的文件 public class MyFilenameFilter implements FilenameFilter { /** * @param args * * 实现功能; 实现FilenameFilter接口,定义出指定的文件筛选器 * */ @Override // 重写accept方法,测试指定文件是否应该包含在某一文件列表中 public boolean accept(File dir, String name) { // TODO Auto-generated method stub // 创建返回值 boolean flag = true; // 定义筛选条件 // endWith(String str);判断是否是以指定格式结尾的 if (name.toLowerCase().endsWith(".txt")) { } else if (name.toLowerCase().endsWith(".doc")) { } else if (name.toLowerCase().endsWith(".doc")) { } else { flag = false; } // 返回定义的返回值 // 当返回true时,表示传入的文件满足条件 return flag; } }