原文地址:http://blog.csdn.net/three_man/article/details/31012903?utm_source=tuicool

介绍

本文主要介绍一种轻量级的文件监控方式,对文件的Create & Change & Delete,都有一个对应的Event方法来进行处理。对于核心的File Monitor Class,我们继承一个监听适配器类FileAlterationListenerAdaptor,这样会更方便,就不用再去重写每个Event方法。

 package shuai.study.file.generator;

 import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Date; import org.apache.log4j.Logger; import shuai.study.file.tooler.CommonTooler; /**
* @author shengshu
*
*/
public class FileGenerator implements Runnable {
private static final Logger LOG = Logger.getLogger(FileGenerator.class); private String directory = null; private static Date date = new Date(); public FileGenerator(String directory) {
this.directory = directory;
} private void generator(String directory) {
for (int i = 0; i < 10; i++) {
String fileName = CommonTooler.getDateTimeFormat(date) + "-" + Thread.currentThread().getId() + i + ".pm"; LOG.info("[Path]: " + directory + "/" + fileName); try {
// Create file (path: directory/fileName)
Files.createFile(Paths.get(directory, fileName));
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
} @Override
public void run() {
this.generator(directory);
}
}
 package shuai.study.file.monitor;

 import java.io.File;
import java.io.IOException; import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.apache.log4j.Logger; import shuai.study.file.tooler.CommonTooler; /**
* @author shengshu
*
*/
public class FileMonitor extends FileAlterationListenerAdaptor {
private static final Logger LOG = Logger.getLogger(FileMonitor.class); private static FileMonitor fileMonitor; private static int pageNumber = 0; private FileMonitor() { } // Get singleton object instance
public static FileMonitor getFileMonitor() {
if (fileMonitor == null) {
synchronized (FileMonitor.class) {
if (fileMonitor == null) {
fileMonitor = new FileMonitor();
}
}
} return fileMonitor;
} // Create file event
@Override
public void onFileCreate(File file) {
LOG.info("[Create]: " + file.getAbsolutePath()); String fileAbsolutePath = file.getAbsolutePath();
String fileAbsoluteParentPath = file.getParent();
String fileBaseName = FilenameUtils.getBaseName(fileAbsolutePath); File destFile = new File(fileAbsoluteParentPath + File.separator + fileBaseName + "-" + CommonTooler.pagingFormat(pageNumber) + ".xml"); try {
FileUtils.moveFile(file, destFile);
} catch (IOException ioe) {
ioe.printStackTrace();
} pageNumber++;
} // Change file event
@Override
public void onFileChange(File file) {
LOG.info("[Change]: " + file.getAbsolutePath());
} // Delete file event
@Override
public void onFileDelete(File file) {
LOG.info("[Delete]: " + file.getAbsolutePath());
} public void monitor(String directory, int interval) {
// Observer file whose suffix is pm
FileAlterationObserver fileAlterationObserver = new FileAlterationObserver(directory, FileFilterUtils.and(FileFilterUtils.fileFileFilter(),
FileFilterUtils.suffixFileFilter(".pm")), null); // Add listener for event (file create & change & delete)
fileAlterationObserver.addListener(this); // Monitor per interval
FileAlterationMonitor fileAlterationMonitor = new FileAlterationMonitor(interval, fileAlterationObserver); try {
// Start to monitor
fileAlterationMonitor.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
 package shuai.study.file.tester;

 import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths; import org.apache.log4j.Logger; import shuai.study.file.generator.FileGenerator;
import shuai.study.file.monitor.FileMonitor; /**
* @author shengshu
*
*/
public class FileTester {
private static final Logger LOG = Logger.getLogger(FileTester.class); private static String directory = "/home/omc/tmp"; public static void main(String[] args) {
// Create directory if it does not exist
try {
Files.createDirectory(Paths.get(directory));
} catch (IOException ioe) {
ioe.printStackTrace();
} LOG.info("File Monitor...");
// Start to monitor file event per 500 milliseconds
FileMonitor.getFileMonitor().monitor(directory, 500); LOG.info("File Generater...");
// New runnable instance
FileGenerator fileGeneratorRunnable = new FileGenerator(directory); // Start to multi-thread for generating file
for (int i = 0; i < 10; i++) {
Thread fileGeneratorThread = new Thread(fileGeneratorRunnable);
fileGeneratorThread.start();
}
} }
 package shuai.study.file.tooler;

 import java.text.SimpleDateFormat;
import java.util.Date; /**
* @author shengshu
*
*/
public class CommonTooler { // Date time format
public static String getDateTimeFormat(Date date) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd-HHmm");
String dateTime = simpleDateFormat.format(date); return dateTime;
} // Page format
public static String pagingFormat(int pageNumber) {
String pageNumberStr = "P00"; if (pageNumber < 0) {
throw new NumberFormatException("The page number should not be negative");
} if (pageNumber < 10) {
pageNumberStr = String.format("P0%d", pageNumber);
} else {
pageNumberStr = String.format("P%d", pageNumber);
} return pageNumberStr;
} }

JAVA轻量级文件监控的更多相关文章

  1. java实现文件监控

    文件监控器: package testfile; import org.apache.commons.io.monitor.FileAlterationListenerAdaptor; import ...

  2. Springboot之文件监控

    背景:在实际环境部署构成中,由于特殊网络环境因素,有很多服务器之间的网络都是单向的,不能互相访问的,只有通过特定技术手段做到文件的单项摆渡,这就需要在两台服务器上分别写序列化程序和反序列化程序,这里不 ...

  3. Java实现文件夹下文件实时监控

    一.commons-io方法 1.使用Commons-io的monitor下的相关类可以处理对文件进行监控,它采用的是观察者模式来实现的 (1)可以监控文件夹的创建.删除和修改 (2)可以监控文件的创 ...

  4. 基于 JVMTI 实现 Java 线程的监控(转)

    随着多核 CPU 的日益普及,越来越多的 Java 应用程序使用多线程并行计算来充分发挥整个系统的性能.多线程的使用也给应用程序开发人员带来了巨大的挑战,不正确地使用多线程可能造成线程死锁或资源竞争, ...

  5. 干货 | 云智慧透视宝Java代码性能监控实现原理

    这篇图文并茂,高端大气上档次,思维缜密的文章,一看就和我平时的风格不同.对了.这不是我写的,是我家高大英俊,写一手好代码,做一手好菜的男神老公的大作,曾发表于技术公号,经本人授权转载~~ 一.Java ...

  6. Java 服务端监控方案(四. Java 篇)

    http://jerrypeng.me/2014/08/08/server-side-java-monitoring-java/ 这个漫长的系列文章今天要迎来最后一篇了,也是真正与 Java 有关的部 ...

  7. Java虚拟机性能监控与调优实战

    From:  https://c.m.163.com/news/a/D7B0C6Q40511PFUO.html?spss=newsapp&fromhistory=1 Java虚拟机性能监控与调 ...

  8. 一文教您如何通过 Java 压缩文件,打包一个 tar.gz Filebeat 采集器包

    欢迎关注笔者的公众号: 小哈学Java, 专注于推送 Java 领域优质干货文章!! 个人网站: https://www.exception.site/essay/create-tar-gz-by-j ...

  9. 文件监控性能问题【BUG】

    文件监控性能问题[BUG] 背景:JAVA写了一个文件夹目录监控的程序,使用的是org.apache.commons.io.monitor 包,项目稳定运行了一个月,现场反馈,文件夹数据处理越来越慢, ...

随机推荐

  1. decimal 和 numeric (Transact-SQL)

    decimal(18,0)18是定点精度,0是小数位数.decimal(a,b)a指定指定小数点左边和右边可以存储的十进制数字的最大个数,最大精度38.b指定小数点右边可以存储的十进制数字的最大个数. ...

  2. linux commands ---2 ,学习vim编辑器如何使用的方法。

    vim /data/yst.txt   打开一个文件之后,然后在命令行模式下,输入:help 可以调出 vim 的帮助文档. 然后会进入: 然后就可以查阅具体的帮助文档了,再也不用再网上找一些零散的v ...

  3. smali插入log,打印变量

    一:Log打印变量: Log打印字符串: #liyanzhong debug const-string v1, "TAG" const-string v2, "xunbu ...

  4. JQuery操作DOM对象

    1.追加节点( 儿子关系) append()     $("已有元素").append("动态添加元素");  在已有元素的内部的后面追加一个元素 append ...

  5. NGUI具有流光效果的UISprite

    之前做过一个流光效果(http://www.cnblogs.com/jietian331/p/4748644.html). 现将其改进一下,与NGUI结合起来,提供一个具有流光效果的组件:UIWalk ...

  6. 一个UWSGI的例子

    摘要:uwsgi执行顺序:启动master进程,执行python脚本的公共代码(import同一层).然后生成worker进程,uwsgi.post_fork_hook=init_functions, ...

  7. 使用myeclipse新建和删除web项目时一定要小心

    今天使用myeclipse在非工作空间的路径下新建一个web项目,路径内包含了原有一些web项目,可是我在指定位置时,在那个路径下多写一个子目录的路径,以为myeclipse会 为我默认新建子目录以便 ...

  8. Android Service生命周期 Service里面的onStartCommand()方法详解

    在Demo上,Start一个Service之后,执行顺序:onCreate - > onStartCommand 然后关闭应用,会重新执行上面两步. 但是把代码拷贝到游戏工程发现,关闭游戏后,只 ...

  9. PHP获取当期前运行文件的路径,名字,服务器路径

    <?phpecho "显示脚本文件的相对路径和文件名:\"".$_SERVER["PHP_SELF"]."\"<br& ...

  10. Quick Cocos2dx Action相关

    周末在家除了看犯罪心里和反恐24小时,啥都没干,为毛在家老是不能安安静静的看书学习敲代码?不知道啊 心好累,感觉学习不下去了. 然后公司上午有半天世界杯决赛假,下午回来更新了svn,没啥工作内容,只好 ...