- 浏览: 779005 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
wangyudong:
新版本 Wisdom RESTClienthttps://gi ...
jersery client调用REST框架web services服务的一个示例 -
wangyudong:
很多REST Client是不支持自动化测试RESTful A ...
jersery client调用REST框架web services服务的一个示例 -
doubledumbao:
感谢你的代码,在使用中发现两处小问题,已经做了修改,再次感谢。 ...
Java Zip Utils 压缩/解压缩工具包 -
doubledumbao:
package com.ry.messagedigest;
...
Java Zip Utils 压缩/解压缩工具包 -
phrmgb:
对wsdl讲解的很细致,收藏
Web Service (二) WSDL详解
一直使用tomcat开发,只要将<Context docBase="MyTest" path="/MyTest" reloadable="true" /></Host>中的reloadable属性设置成true.Tomcat就能自动监测到某个文件发生了改变,然后重新装载。由于对这个有点兴趣,所有也试着写了一个简单的实现,但对于文件夹下的多个文件监测,除了把每个文件都加入监测器中外,没有更好的思路和方法。大家可以讨论一下:
除件有我测试的整个eclipse工程文件,有兴趣的童鞋们可以看一下.
FileMonitor类的代码如下所示:
public class FileMonitor { private static final FileMonitor instance = new FileMonitor(); private Timer timer; private Map<String, FileMonitorTask> timerEntries; private FileMonitor() { this.timerEntries = new HashMap<String, FileMonitorTask>(); this.timer = new Timer(); } public static FileMonitor getInstance() { return instance; } /** * 对某个文件实行监听 * * @param listener * The file listener * @param filename * The filename to watch * @param period * The watch interval. */ public void addFileChangeListener(FileChangeListener listener, String filename, long period) { this.removeFileChangeListener(filename); FileMonitorTask task = new FileMonitorTask(listener, filename); this.timerEntries.put(filename, task); this.timer.schedule(task, period, period); } /** * 停止对某个文件的监听 * * @param listener * The file listener * @param filename * The filename to keep watch */ public void removeFileChangeListener(String filename) { FileMonitorTask task = (FileMonitorTask) this.timerEntries .remove(filename); if (task != null) { task.cancel(); } } private static class FileMonitorTask extends TimerTask { private FileChangeListener listener; private String filename; private File monitoredFile; private long lastModified; public FileMonitorTask(FileChangeListener listener, String filename) { this.listener = listener; this.filename = filename; this.monitoredFile = new File(filename); if (!this.monitoredFile.exists()) { return; } this.lastModified = this.monitoredFile.lastModified(); } public void run() { long latestChange = this.monitoredFile.lastModified(); if (this.lastModified != latestChange) { this.lastModified = latestChange; //对发生改变的文件调用处理方法 this.listener.fileChanged(this.filename); } } } }
当监听到文件发生改变时处理的类如下所示:
public class ClassFileChangeListener implements FileChangeListener { /* * 当被监听的文件发生改变时,调用此方法 * */ public void fileChanged(String filename) { System.out .println("File " + filename + " modified ,it must reload !"); } }
当web容器启动时,将要监听的文件加入到文件监听器类中,servet类如下所示:
public class InitServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override public void init(ServletConfig config) throws ServletException { // TODO Auto-generated method stub super.init(config); long period = Long.parseLong(config.getInitParameter("period")); String filename = config.getInitParameter("filename"); if(period > 0 && filename != null && !filename.isEmpty()){ //String realPath = config.getServletContext().getRealPath(""); //String filename = realPath + "\\WEB-INF\\classes\\jdbc.propertis"; FileMonitor.getInstance().addFileChangeListener(new ClassFileChangeListener(), filename, period); } } /** * @see HttpServlet#HttpServlet() */ public InitServlet() { super(); // TODO Auto-generated constructor stub } }
web.xml中的配置如下所示:
<servlet> <description></description> <display-name>InitServlet</display-name> <servlet-name>InitServlet</servlet-name> <servlet-class>servlet.InitServlet</servlet-class> <init-param> <!-- the period of watching file --> <param-name>period</param-name> <!-- milliseconds --> <param-value>1000</param-value> </init-param> <init-param> <param-name>filename</param-name> <param-value>D:/aa.txt</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet>
由于使用eclipse开发时,eclipse中的tomcat,将文件部署在了:D:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp3\wtpwebapps
下面,如我的这个工程中的jdbc.properties文件部署成了D:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp3\wtpwebapps\MyTest\WEB-INF\classes\jdbc.propertis,
此时使用此路径创建的File不存在,所以为了方便测试,我将要监听的文件路径作为InitServlet的一个初始化参数了。
除件是整个工程的文件,直接导入eclipse中即可使用。
- MyTest.rar (8.9 KB)
- 下载次数: 186
评论
12 楼
knight_black_bob
2016-03-02
楼主 ,怎么监听 远程 文件夹 ?
11 楼
小勇12
2011-06-22
不晓得是否底层又是用JNI来完成的
10 楼
qiuboboy
2011-06-21
你去找找有个java的开源实现,可以监控文件系统的。
9 楼
liyun_1981
2011-06-21
支持楼主一个,觉得可在fileChanged方法里面加入自定义运行时类加载的逻辑,这样就比较有实用价值了。
PS:楼上几个都没说到点子上。。。
PS:楼上几个都没说到点子上。。。
8 楼
cs624178950
2011-06-20
呵呵!还是不错,,
7 楼
chenchuan
2011-06-20
好像java7里面已经加上了这个功能了 具体的没有用过 模糊的记得Java7新特性监听文件改变
http://blog.csdn.net/jastar/archive/2011/03/18/6259500.aspx
http://blog.csdn.net/jastar/archive/2011/03/18/6259500.aspx
6 楼
ryxxlong
2011-06-19
gzfreeman 写道
好像apache的commons-io库就有可提供FileMonitor的功能阿
谢谢,commons-io库确实有FileMonitor的功能
Commons IO is a library of utilities to assist with developing IO functionality.
There are six main areas included:
Utility classes - with static methods to perform common tasks
Input - useful Input Stream and Reader implementations
Output - useful Output Stream and Writer implementations
Filters - various implementations of file filters
Comparators - various implementations of java.util.Comparator for files
File Monitor - a component for monitoring file system events
5 楼
甄子丹
2011-06-19
apache vfs可以监听文件变化
4 楼
gzfreeman
2011-06-19
好像apache的commons-io库就有可提供FileMonitor的功能阿
3 楼
ryxxlong
2011-06-17
kimmking 写道
1\lastmodified不准
2\1000ms太长了
3\Timer太浪费了
还是等jdk支持操作系统级的fileWatch吧~(jdk7)
2\1000ms太长了
3\Timer太浪费了
还是等jdk支持操作系统级的fileWatch吧~(jdk7)
呵呵,我现在的水平只能想到这,谢谢你的建议
2 楼
kimmking
2011-06-17
1\lastmodified不准
2\1000ms太长了
3\Timer太浪费了
还是等jdk支持操作系统级的fileWatch吧~(jdk7)
2\1000ms太长了
3\Timer太浪费了
还是等jdk支持操作系统级的fileWatch吧~(jdk7)
1 楼
ryxxlong
2011-06-17
竟然没一个人有兴趣,真是杯具
发表评论
-
java 中JSON数据特殊字符的处理
2014-05-05 18:41 6946JSon 数据中的String 传递数据时,需要处理好特殊 ... -
Java Zip Utils 压缩/解压缩工具包
2014-05-05 11:27 6998实际开发中可能会用到压缩或解压缩,底层借助于apache的z ... -
JRE 与 JDK ,JVM client模式与server模式
2012-10-11 20:08 10332本文大部分内容转载自:JRE 与 JDK ,JVM Clien ... -
edtFtp实现FTP工具类
2012-10-11 11:22 1282edtFtp是一个开源的纯Java的FTP客户端类库。由于它实 ... -
Java class文件的JDK编译版本号
2012-10-11 09:30 1858本人转载自新浪博客,原文地址:http://blog.sina ... -
TOMCAT支持J2EE版本问题
2012-09-03 18:33 7064j2ee1.4 支持的是servlet2.4,j ... -
SimpleDateFormat 线程安全的问题
2012-05-25 18:10 1309SimpleDateFormat中的日期 ... -
Java编程中“为了性能”尽量要做到的一些地方
2012-05-17 08:48 870这篇文章COPY自:http://www.iteye.c ... -
在eclipse中给jar关联相应的源文件(Source)
2011-05-09 17:17 6766以给commons.dbcp.jar关联源文件为例进行说明。 ... -
tomcat的启动内存设置
2011-05-07 17:16 1148转载自:http://blog.csdn.net/chen ... -
java调用sql server存储过程
2011-05-06 17:21 3488为了便于测试,先创建一个简单的表: CREATE TA ... -
session过期问题
2010-12-16 11:43 1274摘自:http://dev.firnow.com/course ... -
awttest
2010-12-06 22:20 0protected void doPost(Htt ... -
java环境变量设置
2010-07-01 22:01 3236windows xp下配置JDK环境变量: 1.安装JD ... -
一个删除指定目录下所有文件及子目录的Java程序
2010-05-04 14:30 6896今天在je上闲逛时,看到很多人分享的一个删除指定目录下所有文件 ... -
Publishing failed with multiple errors和Timeout waiting for Tomcat v5.5的解决方法
2010-04-27 14:59 2217转载自:http://sucre.iteye.com/bl ... -
eclipse注释规范设置
2010-04-13 14:57 1820本文来自CSDN博客,转载请标明出处:http://blog. ... -
String , StringBuffer, StringBuilder的区别
2010-03-03 17:38 3553转载自:http://www.cnblogs.com/liuy ... -
解决一台机器同时运行多个Tomcat服务
2010-03-03 15:36 1297转载自: http://www.cnblog ... -
如何生成javadoc文档
2010-03-03 15:31 5538编写Javadoc 代码 在Java 代码的类、 ...
相关推荐
《基于JDK7的FileMonitor:精简版文件监控服务详解》 在Java开发中,对文件系统的实时监控是一项常用且重要的任务。JDK7引入了`WatchService`接口,为开发者提供了一种监听文件系统变化的能力。然而,`WatchService...
文件监控器FileMonitor使用HashMap来存储文件和文件对应的文件条目,使用ArrayList来存储文件监听器。 在Java实现文件监控器FileMonitor的实例代码中,还使用了WeakReference来存储文件监听器,以避免内存泄露。...
这个文件很可能包含了`FileMonitor`类的实现,这是整个程序的核心,用于处理文件监控任务,比如设置文件观察器,处理文件系统更改通知等。 5. **StdAfx.cpp**: 这是一个常见的预编译头文件,包含项目特定的预...
使用`FileMonitor`,你可以设置监听器来捕获文件系统中的变动,这样当特定事件发生时,程序可以做出相应的响应。以下是一些关于如何使用`FileMonitor`的关键知识点: 1. **初始化FileMonitor**:首先,你需要创建一...
// 创建一个文件监察器用于处理文件的格式 FileAlterationObserver observer = new FileAlterationObserver(rootDir,fileFilter,null); //设置文件变化监听器 observer.addListener(new FileMonitor()); //创建文件...
"file-monitor-file-watch.rar" 提供的工具或程序可能就是一个实现文件系统监控的解决方案。它关注于跟踪文件和目录的变更,如文件的修改、重命名、移动以及删除等操作。这种功能对于日志管理、数据同步、版本控制...
首先,`FileMonitor.java`可能是核心的文件监听器类,它实现了文件监控的功能。在Java中,可以使用`java.nio.file.FileSystems`和`java.nio.file.Files`类提供的`WatchService`来监视文件系统事件。`FileMonitor`...
当目标对象的状态发生变化时,例如文件被修改、移动或删除,监听器会触发一个事件,使得程序可以执行相应的处理逻辑。在Windows系统中,`FileSystemWatcher`是.NET框架提供的一种API,而在Linux或Unix系统中,可以...
通过实例化这个类,我们可以设置一个或多个事件监听器,这些监听器会在指定目录下的文件或子目录发生创建、修改、删除或重命名等操作时触发。 要监控文件大小,可以定期使用FileInfo类检查文件的Length属性。例如,...
在"文件监控源码.rar"这个压缩包中,包含了一个名为"FileMonitor"的项目或类,它很可能是一个实现了文件系统监视器的程序。文件监控的基本原理是利用.NET Framework提供的`System.IO.FileSystemWatcher`类。这个类...
public class FileMonitor { public static void main(String[] args) { try (WatchService watchService = FileSystem.getDefault().newWatchService()) { Path path = Paths.get("path_to_monitor"); path....
2. **修改配置文件**:通过Vim编辑器打开`rma.ini`文件进行配置,关键配置项包括: - `RmaPath`:指定RMAagent的二进制文件所在路径。 - `Port`:设置RMAagent与HostMonitor之间的通信端口号,默认为1055。 - `...
Apache Commons IO 提供的`FileAlterationObserver`是一个强大的文件监控工具,它不仅能够监听文件系统的变动,还能设定监控间隔、回调函数等。下面是一个使用`FileAlterationObserver`的例子: ```java import org...
在实际开发中,`File`对象经常与事件监听器一起使用,例如`fileSelected`事件,当用户在文件选择对话框中选择文件后触发。此外,`monitor()`方法可用于监视文件或目录的变化,这对于实时同步或备份文件非常有用。 ...
以下是一段简单的C#代码示例,展示了如何创建一个基本的文件监控器: ```csharp using System; using System.IO; class FileMonitor { static void Main() { FileSystemWatcher watcher = new ...
1. 创建:当一个新的文件或目录被创建时,监视器会记录下这个事件,包括创建者、时间戳以及新文件的完整路径。 2. 删除:文件或目录被移除时,监视器会捕捉到这个动作,记录下被删除的文件名和删除的时间。 3. ...
例如,以下代码片段演示了如何创建一个简单的文件监控器: ```csharp using System; using System.IO; public class FileMonitor { public static void Main() { FileSystemWatcher watcher = new ...
压缩包中的`FileMonitor_Thread`可能是一个源代码文件或库,包含了实现多线程文件监控的核心逻辑。这个文件可能包括了创建和管理线程的代码,文件系统的观察者组件,以及与正则表达式匹配相关的函数。阅读和理解`...
Commons IO 中还有一个重要的组件叫做 FileMonitor,它可以监听文件系统的事件,如文件被创建、修改或删除等。这对于实时监控文件系统的变化非常有用。 #### 七、总结 Apache Commons IO 为 Java 开发者提供了一套...
本文将详细讲解如何使用Java实现文件变化的监控,并通过一个具体的示例来阐述相关知识点。 首先,Java中并没有内置的API直接支持文件系统的监听,但我们可以利用`java.nio.file`包中的`WatchService`接口来实现这一...