近况
最近公司项目上并不忙,但本人却总是有非常大的焦虑感,
正如之前所言,我抛弃的已经抛弃了,想得到的还没有得到,人生无处不迷茫啊
害,我得放松心态吧,就算被开掉又能怎么样呢,如果人生是上帝给的一张旅游票
你本就是来看看的,又何必患得患失,过自己想要的人生吧,人生没有成败。
下面来看看如何使用Commons-io实现对文件的监控吧,也是网上百度就有的东西,记录下来方便查找
使用Commons-io的monitor下的相关类可以处理对文件进行监控,它采用的是观察者模式来实现的
(1)可以监控文件夹的创建、删除和修改
(2)可以监控文件的创建、删除和修改
(3)采用的是观察者模式来实现的
(4)采用线程去定时去刷新检测文件的变化情况
导入依赖
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.7</version> </dependency>
创建文件监听器,根据需要在不同的方法内实现对应的业务逻辑处理。
public class FileListener extends FileAlterationListenerAdaptor { @Override public void onStart(FileAlterationObserver observer) { super.onStart(observer); System.out.println("onStart"); } @Override public void onDirectoryCreate(File directory) { System.out.println("新建:" + directory.getAbsolutePath()); } @Override public void onDirectoryChange(File directory) { System.out.println("修改:" + directory.getAbsolutePath()); } @Override public void onDirectoryDelete(File directory) { System.out.println("删除:" + directory.getAbsolutePath()); } @Override public void onFileCreate(File file) { String compressedPath = file.getAbsolutePath(); System.out.println("新建:" + compressedPath); if (file.canRead()) { // TODO 读取或重新加载文件内容 System.out.println("文件变更,进行处理"); } } @Override public void onFileChange(File file) { String compressedPath = file.getAbsolutePath(); System.out.println("修改:" + compressedPath); } @Override public void onFileDelete(File file) { System.out.println("删除:" + file.getAbsolutePath()); } @Override public void onStop(FileAlterationObserver observer) { super.onStop(observer); System.out.println("onStop"); } }
main方法测试
public static void main(String[] args) throws Exception{ // 监控目录 String rootDir = "D:\\apache-tomcat-7.0.78"; // 轮询间隔 5 秒 long interval = TimeUnit.SECONDS.toMillis(1); // 创建过滤器 IOFileFilter directories = FileFilterUtils.and( FileFilterUtils.directoryFileFilter(), HiddenFileFilter.VISIBLE); IOFileFilter files = FileFilterUtils.and( FileFilterUtils.fileFileFilter(), FileFilterUtils.suffixFileFilter(".txt")); IOFileFilter filter = FileFilterUtils.or(directories, files); // 使用过滤器 FileAlterationObserver observer = new FileAlterationObserver(new File(rootDir), filter); //不使用过滤器 //FileAlterationObserver observer = new FileAlterationObserver(new File(rootDir)); observer.addListener(new FileListener()); //创建文件变化监听器 FileAlterationMonitor monitor = new FileAlterationMonitor(interval, observer); // 开始监控 monitor.start(); }
你可以封装一个文件监控的工具类,核心就是创建一个观察者FileAlterationObserver,
将文件路径Path和监听器FileAlterationListener进行封装,然后交给FileAlterationMonitor。public class FileMonitor { private FileAlterationMonitor monitor; public FileMonitor(long interval) { monitor = new FileAlterationMonitor(interval); } /** * 给文件添加监听 * * @param path 文件路径 * @param listener 文件监听器 */ public void monitor(String path, FileAlterationListener listener) { FileAlterationObserver observer = new FileAlterationObserver(new File(path)); monitor.addObserver(observer); observer.addListener(listener); } public void stop() throws Exception { monitor.stop(); } public void start() throws Exception { monitor.start(); } }
main方法测试
public class FileRunner { public static void main(String[] args) throws Exception { FileMonitor fileMonitor = new FileMonitor(1000); fileMonitor.monitor("/Users/zzs/temp/", new FileListener()); fileMonitor.start(); } }