原文地址: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. java中的序列化流和反序列化流

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px SimSun; color: #4e9072 } 序列化流:把对象按照流一样的方式存入文本文件 ...

  2. PS2鼠标+LCD12864实验(调试未成功)

    此试验我一人调试许久都未成功,但发送ff时,读出来的数据确是对的,一开始让我窃喜,但发送f4时,读出来的数据确是错的,哎让苦恼啊,能力有限,只能先暂时就这样吧,那位什么还要贴出来呢,有两个原因: 1. ...

  3. 并发数据(锁)ReaderWriterLockSlim

    ReaderWriterLockSlim 类 ReaderWriterLockSlim 类支持三种锁定模式:Read,Write,UpgradeableRead.这三种模式对应的方法分别是 Enter ...

  4. 浅谈Spring事务隔离级别

    一.Propagation (事务的传播属性) Propagation : key属性确定代理应该给哪个方法增加事务行为.这样的属性最重要的部份是传播行为.有以下选项可供使用:PROPAGATION_ ...

  5. window.location获取URL中各部分

    博客分类: JAVASCRIPT JavaScriptASP.netSchemeASP网络协议  URL即:统一资源定位符 (Uniform Resource Locator, URL) 完整的URL ...

  6. 11、手把手教你Extjs5(十一)模块界面的总体设计

    上一节中设计了一些模块自定义中用到的要素,为了直观起见,这一节先建立一个模块的主界面.看过我 模块管理常规功能自定义系统的设计与实现 博客的人应该会有所了解了.一个模块的主界面是一个Grid,在其上方 ...

  7. html中的图片、css、js等路径加载问题

    网页文件的存取路径有3种:物理路径.绝对路径和相对路径. 物理路径就是你的文件放在主机上的具体位置,例如:D:\\image\\1.jpg 这种格式,该方法可以很快确定出你的文件,但是在网页显示路径基 ...

  8. virtio-win 驱动

    Direct downloads are available for the .iso, .vfd, and qemu-ga installers. Stable virtio-win iso: ht ...

  9. asp.net-mvc验证码 asp.net-mvc c#验证码

    验证码看不清换一组 写一个类 public class ValidateCode { public ValidateCode() { } /// <summary> /// 验证码的最大长 ...

  10. LPC2478中断控制器以及串口详解

    LPC2478的中断系统 LPC2478使用的是ARM PrimeCell向量中断控制器,一共支持32个中断向量,处于AHB空间便于系统快速访问,在中断向量的硬件优先级上还有一层可以用户自己设计的软件 ...