主要实现的机制大体网上都有说明,就是一个线呈一直跑着,监听着文件的最后修改时间,然后再进行一些处理。
比如自动编译文件,自动重载文件啊,应该都是通过这个机制去实现的。下面贴点代码,附件也给出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提供了一种称为`WatchService`的机制,它允许程序...
这个例子将探讨如何在Java中使用监听器,特别是事件监听器,它们是Java Swing和Java AWT库中用于图形用户界面(GUI)交互的核心组成部分。 首先,我们需要了解Java中的事件模型。Java事件模型基于发布/订阅原则,...
Java文件监控是一个重要的系统功能,它允许程序监听文件或目录的改变,如创建、修改、删除等事件。在Java中,实现文件监控的一种流行库是`jnotify`。`jnotify`是一个轻量级的库,它提供了一个简单的方式来监控文件...
标题中的"java文件监控例子"就是关于如何使用JNotify来实现文件监控的示例。 JNotify库的核心在于提供了一个简单的API,让开发者能够轻松注册对特定文件或目录的监听,并在这些文件或目录发生变化时接收到回调通知...
这个“有用的例子啊JAVA文件选择器”提供的示例代码可以帮助我们更好地理解如何在Java应用程序中集成这样的功能。下面将详细探讨Java中的文件选择器及其相关知识点。 1. **JFileChooser类**: `JFileChooser` 是Java...
在"session监听小例子"中,开发者可能创建了一个实现了以上接口的类,然后在Web应用的`web.xml`配置文件中进行注册,这样每当Session发生生命周期事件时,对应的监听方法就会被调用。 例如,我们可能会在`...
总结来说,ContentProvider监听的例子主要涉及了如何创建ContentProvider、在AndroidManifest.xml中声明Provider、使用ContentObserver监听数据变化以及如何处理这些变化。这在多应用间共享数据或实现数据监听的场景...
Java Session监听器是Java Servlet规范中提供的一种机制,用于对HttpSession对象的生命周期事件进行监听和处理。在Web应用程序中,Session是用来跟踪用户状态的重要工具,特别是在无状态的HTTP协议上。当用户登录后...
总结来说,这个"Java Swing 文件选择器"的例子展示了如何利用`JFileChooser`组件在Java Swing应用中实现用户友好的文件选择功能。通过理解`JFileChooser`的工作原理和提供的各种配置选项,开发者可以轻松地集成文件...
在这个例子中,我们注册了`ENTRY_CREATE`(文件创建)、`ENTRY_DELETE`(文件删除)和`ENTRY_MODIFY`(文件修改)三种事件。每当发生这些事件时,程序会打印出对应的操作和受影响的文件名。注意,`take()`方法会阻塞...
"java100个经典例子"提供了丰富的示例代码,帮助初学者逐步进阶。以下是对几个例子的详细解释: 1. **第一个Java程序**: 这是每个Java初学者都会遇到的第一个Hello World程序,展示了Java程序的基本结构。`public...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
这个"Android 滑动手势监听例子源码.zip"文件提供了一个简单的实例,帮助开发者理解和实现滑动手势监听功能。下面我们将深入探讨Android中滑动手势的原理、实现方式以及如何在实际应用中运用这些知识。 首先,...
在这个例子中,我们创建了一个名为`FileObserverService`的Service,它在创建时启动文件监听,并在销毁时停止。`onEvent`方法会在每次发生监控事件时被调用,根据`event`参数判断具体事件类型并记录到日志。 需要...
Java中的监听机制与观察者设计模式是编程中重要的概念,它们在软件开发中扮演着关键的角色,尤其是在...通过分析`ListenerPractice`这个压缩包中的文件,我们可以进一步加深对这两个概念的理解,实践出更生动的例子。
前端部分,开发者需要监听文件选择事件,获取选中的文件对象,然后通过FormData对象将它们封装成适合发送的数据格式。在用户提交上传请求时,使用XMLHttpRequest或Fetch API发送POST请求,将FormData内容作为请求体...
标题 "jquery文件上传例子(两种方式)" 涉及到的是使用jQuery库进行文件上传的实践,这在Web开发中是非常常见的需求。jQuery是JavaScript的一个轻量级库,它简化了DOM操作、事件处理和Ajax交互等任务。在这个示例中,...
在Java编程中,图片绘制和鼠标事件监听是两个重要的概念,尤其对于开发用户界面和交互式应用程序至关重要。本文将深入探讨这两个主题,并结合一个名为"Plane"的示例,帮助初学者理解如何在Java中实现这些功能。 ...
个人觉得用定时任务来跑垃圾回收不是很好的例子,从译者接触到的项目来看,比较常见的是用定时任务来进行非实时计算,清除临时数据、文件等。 在本文里,我会给大家介绍3种不同的实现方法,listener-class标签 --WEB...
当文件数据被读取时,监听器会被通知并更新进度条。 ```java InputStream is = new ProgressMonitorInputStream(request.getInputStream(), "文件上传"); // ... ``` 对于上传RAR和ZIP文件的解压,Java标准库提供...