java用File类 Timer&TimerTask类写一个简单的文件新增监控器

思路:用listFiles()方法遍历文件,通过比较原来文件与现在文件数组长度判断是否有文件生成,用Timer&&TimerTask刷新文件,将新增文件信息输出。

代码实现:

Monitoring类:

/**
创建监控类
*/
public class Monitoring {
//需要监控的文件
	File f = new File("D:\\123456");
	File files1[] = f.listFiles();
	//实例化Mytask,初始化传参
	Mytask m=new Mytask(f, files1);
	public void monitor() {   
		Timer t = new Timer();
		//刷新时间设为10毫秒
		t.schedule(m,0, 10);
	}
	public static void main(String[] args) {
		new Monitoring().monitor();
	}
}

MyTask类:

/**
创建Mytask类继承
*/
public class Mytask extends TimerTask {
	File f;
	File files1[];
    //定义构造器初始化
	public Mytask(File f, File[] files1) {
	    //将需要监控的目录传过来
		this.f = f;
		//将原文件数组传给本类files
		this.files1 = files1;
	}
	//(这里用到了接口回调,参考上篇文章)
	@Override
	public void run() {
		//创建flies2数组接收指定目录文件(新的)
		File files2[] = f.listFiles();
		//如果两个数组长度不等说明新加了文件
		if (files1.length != files2.length) {
			for (File f2 : files2) {
				// 定义计数器,用来找出不同的文件
				int i = 0;
				for (File f1 : files1) {
					//遍历原来数组与新数组元素比较,如果与原数组每个元素都不一样,i会加到与原来数组长度一样
					if (!f1.getPath().equals(f2.getPath())) {
						  //与所有的文件都不同说明新加元素比较了原数组长度次
						i++;
					}
				}
				//循环完了之后用i比较,如果i等于原长度说明原数组中没找到它的路径就输出
				if (i == files1.length) {
					System.out.println("新增文件名称:"+f2.getName()+"\n"+"新增文件大小:"+"f2.length()/1024"+"KB"+"\n"+"文件最后修改时间"+f2.lastModified());
				}
			}
		}
		//将增加后的数组赋值给原数组
		files1 = files2;
	}
}

在指定目录添加或者创建新文件就会输出到控制台,快试一下吧!!!

你可能感兴趣的:(笔记,java)