Java中监控文件变化的多种方案
一、使用Apache.Common.io库
package com.test.utils.files; import com.sun.deploy.util.SyncFileAccess;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver; import java.io.File; public class FolderWatcher extends FileAlterationListenerAdaptor {
FileAlterationMonitor monitor; public FolderWatcher(String directory) {
monitor = new FileAlterationMonitor(500);
FileAlterationObserver fileObserver = new FileAlterationObserver(directory);
fileObserver.addListener(this);
monitor.addObserver(fileObserver);
} public void start(boolean isDaemonThread) throws Exception {
if (isDaemonThread) {
monitor.setThreadFactory(r -> {
Thread th = new Thread(r);
th.setDaemon(true);
return th;
});
}
monitor.start();
} @Override
public void onFileChange(File file) {
System.out.println("change" + file);
} @Override
public void onFileCreate(File file) {
while (true) {
try {
SyncFileAccess fileAccess = new SyncFileAccess(file);
SyncFileAccess.FileInputStreamLock lock = fileAccess.openLockFileInputStream(1000, false);lock.getFileInputStream().close();
lock.release();
break;
} catch (Exception e)
{ try { Thread.sleep(100); } catch (InterruptedException ignored) { } } } System.out.println("create:" + file); } }
二、使用JAVA.NIO的
package com.test.utils.files; import java.io.IOException;
import java.nio.file.*; import static java.nio.file.StandardWatchEventKinds.*; public class FolderWatcher2 {
private WatchService watcher; public FolderWatcher2(String directory) throws IOException {
watcher = FileSystems.getDefault().newWatchService();
Path path = Paths.get(directory);
path.register(watcher, ENTRY_CREATE, ENTRY_MODIFY);
Path path1 = Paths.get(directory, "abc");
path1.register(watcher, ENTRY_CREATE, ENTRY_MODIFY);
}
public void start() throws InterruptedException {
while (true) {
WatchKey key = watcher.take();
for (WatchEvent<?> event : key.pollEvents()) {
WatchEvent.Kind<?> kind = event.kind();
if (kind == OVERFLOW) {//事件可能lost or discarded
continue;
} Path fileName = (Path) event.context();
System.out.printf("Event %s has happened,which fileName is %s%n", kind.name(), fileName);
}
//这行必须有,不然不能连续地监控目录
if (!key.reset()) {
break;
}
}
} }
Java中监控文件变化的多种方案的更多相关文章
- Java中的文件和流相关知识
1. File File类可以使用文件路径字符串来创建File实例,该文件路径可以是绝对路径或相对路径 File类的list()方法中可以接收一个FilenameFilter参数,通过该参数可以只列出 ...
- JDK 之 NIO 2 WatchService、WatchKey(监控文件变化)
JDK 之 NIO 2 WatchService.WatchKey(监控文件变化) JDK 规范目录(https://www.cnblogs.com/binarylei/p/10200503.html ...
- 3,Java中的文件IO流
1,File类 ··· 概念:File对象可以表示一个文件或目录.可以对其进行增删改查. ··· 常用方法: File f = new File("."); 判断是 ...
- Java中删除文件、删除目录及目录下所有文件(转)
原文链接:Java中删除文件.删除目录及目录下所有文件 知识点:File.delete()用于删除“某个文件或者空目录”!所以要删除某个目录及其中的所有文件和子目录,要进行递归删除,具体代码示例如下: ...
- Java中的文件操作
在使用计算机编程中,常常会用到对于文件的操作,以下是我对于Java中文件的相关内容学习之后的一个总结和在学习过程中遇到的一些问题. 一.什么是文件 对于文件进行操作,首先我们要知道什么是文件.在此之前 ...
- Java中读取文件
Java中读取文件,去除一些分隔符,保存在多维数组里面 public void readFile(String filePath) { File file=new File(filePath); Ar ...
- JAVA中获取文件MD5值的四种方法
JAVA中获取文件MD5值的四种方法其实都很类似,因为核心都是通过JAVA自带的MessageDigest类来实现.获取文件MD5值主要分为三个步骤,第一步获取文件的byte信息,第二步通过Messa ...
- Java中获取文件路径
Java中获取文件路径 1.实例说明 (1)得到 ClassPath的绝对URI路径 Thread.currentThread().getContextClassLoader().getResourc ...
- java中常量文件的配置与读取
java中常量文件的配置与读取: package com.floor.shop.user.util; import java.io.InputStream; import java.io.InputS ...
随机推荐
- Iphone控件大全
Iphone的常用控件有哪些?看看下面 一 视图UIView和UIWindow iphone视图的规则是:一个窗口,多个视图.UIWindow相当于电视机,UIViews相当于演员. 1.显示数据的视 ...
- 工具:使用过的 API 文档生成工具
背景 2012 年之前几乎没有为代码增加注释,当然,代码的命名也不见得合理(好的代码胜过面面俱到的注释),后来接触过一些开源框架,优秀的框架都有一个特点:文档和示例非常多,在后来的日子里,几乎会强制自 ...
- Caused by: java.lang.IllegalArgumentException: Can not set int field reyo.sdk.enity.xxx.xxx to java.lang.Long
由于数据库字段设置不正确引起的,不能选中 alter <table> modify <column> int unsigned; 关于unsigned int类型,可以看看它的 ...
- 从Android4.0源码中提取的截图实现(在当前activity中有效,不能全局截图)
原文:http://blog.csdn.net/xu_fu/article/details/39268771 从这个大神的博客看到了这篇文章,感觉写的挺好的.挺实用的功能.虽然是从源码中提取的,但是看 ...
- TabHost的初步使用
本文主要参考自:http://blog.csdn.net/wulianghuan/article/details/8588947 (里面有TabHost第二种定义的方式,继承TabActivity) ...
- 《App,这样设计才好卖》
<App,这样设计才好卖> 基本信息 作者: (日)池田拓司 译者: 陈筱烟 丛书名: 图灵交互设计丛书 出版社:人民邮电出版社 ISBN:9787115359438 上架时间:2014- ...
- Tornado开发技巧,简单了解tornado
tornado基础入门(一)——简单了解tornado 参考:http://demo.pythoner.com/itt2zh/ch1.html tornado是一个轻量级的web框架,是一个用pyth ...
- golang常用模块介绍
golang模块 一.命令行库Cobra Cobra提供简单的接口来创建强大的现代化CLI接口,比如git与go工具.Cobra同时也是一个程序, 用于创建CLI程序 https://www.jian ...
- APPLE框架之高效便捷的Repository解决方案
原文地址:http://perfy315.iteye.com/blog/1460226 Spring Data JPA 转至:http://note.sdo.com/u/855924134/n/P15 ...
- 奇怪吸引子---DequanLi
奇怪吸引子是混沌学的重要组成理论,用于演化过程的终极状态,具有如下特征:终极性.稳定性.吸引性.吸引子是一个数学概念,描写运动的收敛类型.它是指这样的一个集合,当时间趋于无穷大时,在任何一个有界集上出 ...