java检索文件时加入线程

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

}



原文地址:https://www.cnblogs.com/james1207/p/3367695.html