您的位置:首页 > 运维架构

实时监控文件夹及文件的变化

2017-06-21 11:00 225 查看
点击下载commons io

测试代码一

package com.jdy.test;

import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.HiddenFileFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.monitor.FileAlterationListener;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;

import com.jdy.listener.FileAlterationListenerImpl;

public class FileTest {

public static void main(String[] args) {
// 创建文件监听器
FileAlterationListener listener = new FileAlterationListenerImpl();

// 创建文件过滤器
IOFileFilter directories = FileFilterUtils.and(
FileFilterUtils.directoryFileFilter(),
HiddenFileFilter.VISIBLE);

IOFileFilter files = FileFilterUtils.and(
FileFilterUtils.fileFileFilter(),
FileFilterUtils.suffixFileFilter(".txt"));

IOFileFilter fileFilter = FileFilterUtils.or(directories, files);

// 创建文件观察器
String directory = "D:/folder";
FileAlterationObserver observer = new FileAlterationObserver(directory, fileFilter);
observer.addListener(listener);

// 创建文件监控器
long interval = 1000l;
FileAlterationMonitor monitor = new FileAlterationMonitor(interval);
monitor.addObserver(observer);

try {
monitor.start();
} catch (Exception e) {
e.printStackTrace();
}

//主线程循环打印100次
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName() + " --> "+ i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}


测试代码二

package com.jdy.test;

import java.io.FileFilter;

import org.apache.commons.io.monitor.FileAlterationListener;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;

import com.jdy.filter.FileFilterImpl;
import com.jdy.listener.FileAlterationListenerImpl;

public class FileTest2 {

public static void main(String[] args) {
// 创建文件监听器
FileAlterationListener listener = new FileAlterationListenerImpl();

// 创建文件观察器
String directory = "D:/folder";
FileFilter fileFilter = new FileFilterImpl();
FileAlterationObserver observer = new FileAlterationObserver(directory, fileFilter);
observer.addListener(listener);

// 创建文件监控器
long interval = 1000l;
FileAlterationMonitor monitor = new FileAlterationMonitor(interval);
monitor.addObserver(observer);

try {
monitor.start();
} catch (Exception e) {
e.printStackTrace();
}

//主线程循环打印100次
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName() + " --> "+ i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}


自定义监听器

package com.jdy.listener;

import java.io.File;

import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationObserver;

public class FileAlterationListenerImpl extends FileAlterationListenerAdaptor {

@Override
public void onDirectoryChange(File directory) {
System.out.println(directory.getName() + " ---> onDirectoryChange");
super.onDirectoryChange(directory);
}

@Override
public void onDirectoryCreate(File directory) {
System.out.println(directory.getName() + " ---> onDirectoryCreate");
super.onDirectoryCreate(directory);
}

@Override
public void onDirectoryDelete(File directory) {
System.out.println(directory.getName() + " ---> onDirectoryDelete");
super.onDirectoryDelete(directory);
}

@Override
public void onFileChange(File file) {
System.out.println(file.getName() + " ---> onFileChange");
super.onFileChange(file);
}

@Override
public void onFileCreate(File file) {
System.out.println(file.getName() + " ---> onFileCreate");
super.onFileCreate(file);
}

@Override
public void onFileDelete(File file) {
System.out.println(file.getName() + " ---> onFileDelete");
super.onFileDelete(file);
}

@Override
public void onStart(FileAlterationObserver observer) {
System.out.println(observer.getDirectory().getAbsolutePath() + " ---> onStart");
super.onStart(observer);
}

@Override
public void onStop(FileAlterationObserver observer) {
System.out.println(observer.getDirectory().getAbsolutePath() + " ---> onStop");
super.onStop(observer);
}

}


自定义过滤器

package com.jdy.filter;

import java.io.File;

import org.apache.commons.io.filefilter.FileFileFilter;

public class FileFilterImpl extends FileFileFilter {

private static final long serialVersionUID = 1L;

@Override
public boolean accept(File file) {
System.out.println(file.getName() + "accept");
return super.accept(file);
}
}


打印结果

main --> 0
D:\folder ---> onStart
D:\folder ---> onStop
main --> 1
D:\folder ---> onStart
D:\folder ---> onStop
main --> 2
D:\folder ---> onStart
D:\folder ---> onStop
main --> 3
D:\folder ---> onStart
11.txt ---> onFileCreate
22.txt ---> onFileCreate
33.txt ---> onFileCreate
D:\folder ---> onStop
main --> 4
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java