java检索文件时加入线程

来源:互联网 发布:centos搭建hadoop 编辑:程序博客网 时间:2024/05/18 07:46
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;}}