文件监听的例子 JAVA版
来源:互联网 发布:易语言磁力链解析源码 编辑:程序博客网 时间:2024/05/17 06:34
主要实现的机制大体网上都有说明,就是一个线呈一直跑着,监听着文件的最后修改时间,然后再进行一些处理。
比如自动编译文件,自动重载文件啊,应该都是通过这个机制去实现的。下面贴点代码,附件也给出eclipse代码工程.
代理是参考别人的改的,还挺简单的,我就是整理了一下,谁需要就直接拿去用吧。
1 FileListener.java 监听接口
- import java.io.File;
- public interface FileListener
- {
- void fileChanged (File file);
- }
2 FileListenerImpl.java 具体的监听实现
- import java.io.File;
- public class FileListenerImpl implements FileListener {
- public void fileChanged(File file) {
- System.out.println(" File [ " + file.getName() + " ] changed At: "
- + new java.util.Date());
- }
- }
3 FileMonitor.java 监听任务的工作类
- import java.util.*;
- import java.io.File;
- import java.lang.ref.WeakReference;
- public class FileMonitor {
- private Timer timer;
- private HashMap files_;
- private Collection listeners; // of WeakReference(FileListener)
- public FileMonitor(long pollingInterval) {
- files_ = new HashMap();
- listeners = new ArrayList();
- timer = new Timer(true);
- timer.schedule(new FileMonitorNotifier(), 0, pollingInterval);
- }
- public void stop() {
- timer.cancel();
- }
- public void addFile(File file) {
- if (!files_.containsKey(file)) {
- long modifiedTime = file.exists() ? file.lastModified() : -1;
- files_.put(file, new Long(modifiedTime));
- }
- }
- public void removeFile(File file) {
- files_.remove(file);
- }
- public void addListener(FileListener fileListener) {
- for (Iterator i = listeners.iterator(); i.hasNext();) {
- WeakReference reference = (WeakReference) i.next();
- FileListener listener = (FileListener) reference.get();
- if (listener == fileListener)
- return;
- }
- listeners.add(new WeakReference(fileListener));
- }
- public void removeListener(FileListener fileListener) {
- for (Iterator i = listeners.iterator(); i.hasNext();) {
- WeakReference reference = (WeakReference) i.next();
- FileListener listener = (FileListener) reference.get();
- if (listener == fileListener) {
- i.remove();
- break;
- }
- }
- }
- private class FileMonitorNotifier extends TimerTask {
- public void run() {
- Collection files = new ArrayList(files_.keySet());
- for (Iterator i = files.iterator(); i.hasNext();) {
- File file = (File) i.next();
- long lastModifiedTime = ((Long) files_.get(file)).longValue();
- long newModifiedTime = file.exists() ? file.lastModified() : -1;
- if (newModifiedTime != lastModifiedTime) {
- files_.put(file, new Long(newModifiedTime));
- for (Iterator j = listeners.iterator(); j.hasNext();) {
- WeakReference reference = (WeakReference) j.next();
- FileListener listener = (FileListener) reference.get();
- // Remove from list if the back-end object has been GC'd
- if (listener == null)
- j.remove();
- else
- listener.fileChanged(file);
- }
- }
- }
- }
- }
- }
对上段代码有两个地方不太理解 有高手请帮我解答一下
第一点:为什么要使用WeakReference 呢?这个是干什么用的,我查了下是若引用,但还是不明白,在这里为什么要用这个呢。
第二点:private HashMap files_; 对于files_的声明,为什么我把files_的下划线用eclipse重构功能去掉(也就是改 名)后,底下就会报错呢。
4 Test.java 测试类
- import java.io.File;
- public class Test {
- public static void main(String args[]) {
- FileMonitor monitor = new FileMonitor(1000);
- monitor.addFile(new File(
- "C://wlrun.log"));
- monitor.addListener(new FileListenerImpl());
- while (!false)
- ;
- }
- }
其中FileMonitor monitor = new FileMonitor(1000)中的参数1000 是间隔多长时间进行检查一次,大家在使用的时候
通常是做一个专门处理该任务的线程,而不是直接在main里起一个主线程。
- 文件监听的例子 JAVA版
- Java读写文件的例子
- Java 文件操作的例子
- java文件读写的例子
- java文件监听的实现(1)
- JAVA监听磁盘文件状态的变化
- 事件监听的简单例子
- 一个键盘监听的例子
- java 监听文件修改
- JAVA文件监听
- JAVA用户自定义事件监听完整例子
- JAVA用户自定义事件监听完整例子
- JAVA用户自定义事件监听完整例子
- JAVA用户自定义事件监听完整例子
- common-io-2.0的新功能之文件监控FileAlteration(文件监听的两种实现方法《很全的监听文件例子》)
- java读excel文件的例子
- java中属性文件读取的例子
- 在Java中锁文件的例子
- linux weblogic webservice java.lang.reflect.InvocationTargetException
- C++文件读写函数介绍
- 怎么得到幸福
- 如何快速的学会超级不懂的东西
- 最常用的JavaScript函数
- 文件监听的例子 JAVA版
- Android 网络
- android解决UI阻塞问题——创建AsyncTask 子线程
- Android 网络
- Android 网络
- Zencart产品属性批量添加
- 命令行进行光盘刻录
- 鼠标事件
- ExtJs之面板(Panel)学习