如何实现文件监控+读取文件内容

 如题,现在要用java实现监控一个文件夹新增的文件(如一个txt文件,有几个字符),本人使用JNotify可以实现文件夹监控,即该txt文件新增至监控文件夹内,后台提示路径跟文件名,现想取文件中的数据,提示另外的程序正在使用,进程无法访问。请问大家有实现的吗?或者使用其他插件实现也可以?如何在新文件进入得到路径名称后取消对该文件的监控?

使用 commons-io 中的文件监控
[code="java"]package org.demo.file;

import java.util.concurrent.TimeUnit;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;

/**

  • 文件监控测试
  • @author
  • @date 2010-11-16
  • @file org.demo.file.FileMonitor.java
    */
    public class FileMonitorTest {

    /**

    • @param args
    • @throws Exception */ public static void main(String[] args) throws Exception { // 监控目录 String rootDir = "d:\Temp"; // 轮询间隔 5 秒 long interval = TimeUnit.SECONDS.toMillis(5); // FileAlterationObserver observer = new FileAlterationObserver( rootDir, FileFilterUtils.and( FileFilterUtils.fileFileFilter(), FileFilterUtils.suffixFileFilter(".java")), null); observer.addListener(new MyFileListener()); FileAlterationMonitor monitor = new FileAlterationMonitor(interval,observer); // 开始监控 monitor.start(); } }[/code] [code="java"]package org.demo.file;

import java.io.File;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;

/**

  • 自定义文件监听器
  • @author
  • @date 2010-11-16
  • @file org.demo.file.MyFileListener.java */ public class MyFileListener extends FileAlterationListenerAdaptor{ @Override public void onFileCreate(File file) { System.out.println("[新建]:" + file.getAbsolutePath()); } @Override public void onFileChange(File file) { System.out.println("[修改]:" + file.getAbsolutePath()); } @Override public void onFileDelete(File file) { System.out.println("[删除]:" + file.getAbsolutePath()); } }[/code]

是不是在程序中读完文件后没有释放资源?如果不释放的话就会一直占用文件出现被锁的情况。
[code="java"] BufferedReader buf = null;
try {
buf = new BufferedReader(new FileReader(file));
System.out.println(buf.readLine());
} catch (IOException e) {
e.printStackTrace();
} finally {
// 这里释放系统 IO 资源
try {if (buf != null){buf.close();}}catch (Exception e){}
}[/code]