思路:用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;
}
}
在指定目录添加或者创建新文件就会输出到控制台,快试一下吧!!!