java检索文件时加入线程
阅读原文时间:2021年04月20日阅读:1

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;  
}

}