使用commons-vfs监听文件系统

2018-03-21 20:12:24
1640次阅读
0个评论

Apache commons VFS又叫做 Apache Commons Virtual FileSystem。是一组功能强大的对各类资源的访问接口,目前这个JAR包得到了全新的重构,目前最新的版本是2.2。

如果我们在平常的工作中,需要得到一些不同格式文件的信息,比如文件大小、所在路径、文件最后更改时间等,或者我们需要对文件进行一些常规的操作,比如删除文件,拷贝文件等等,那么Apache Commons中的VFS(Virtual File System)就是我们可以考虑的一个开源系统。commons-vfs是一个强大的虚拟文件系统,为操作各种各样的文件系统提供了统一API。这里使用的是commons-vfs2。

据VFS的官网介绍,它目前支持如下文件格式:

FTP 、Local Files 、HTTP and HTTPS 、SFTP 、Temporary Files 、Zip, Jar and Tar (uncompressed, tgz or tbz2) 、gzip and bzip2 、res 、ram 、mime。




测试代码:

import org.apache.commons.vfs2.*;  
import org.apache.commons.vfs2.impl.DefaultFileMonitor;  
import org.junit.Test;  
  
import java.io.File;  
    
public class ListenerTest {  
    @Test  
    public void test(){  
        try {  
            FileSystemManager fsm = VFS.getManager();  
            FileObject file = fsm.resolveFile(new File("D://vfs").getAbsolutePath());  
            DefaultFileMonitor fileMonitor = new DefaultFileMonitor(new FileListener() {  
                @Override  
                public void fileCreated(FileChangeEvent event) throws Exception {  
                    resolveEvent("Created",event);  
                }  
  
                @Override  
                public void fileDeleted(FileChangeEvent event) throws Exception {  
                    resolveEvent("Deleted",event);  
                }  
  
                @Override  
                public void fileChanged(FileChangeEvent event) throws Exception {  
                    resolveEvent("Changed",event);  
                }  
  
                private void resolveEvent(String type, FileChangeEvent event){  
                    FileObject fileObject = event.getFile();  
                    FileName fileName = fileObject.getName();  
                    System.out.println(type + ": " + fileName.toString());  
                }  
            });  
            fileMonitor.addFile(file);  
            fileMonitor.start();  
            while(true){  
                Thread.sleep(1000);  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}

跑起来,然后在D盘下面创建vfs,并依次创建一个文本文档,重命名为ddd,打开文档编写内容并保存,删除文件,你会发现控制台会输出:


Created: file:///D:/vfs/新建文本文档.txt  
Created: file:///D:/vfs/ddd.txt  
Deleted: file:///D:/vfs/新建文本文档.txt  
Changed: file:///D:/vfs/ddd.txt  
Deleted: file:///D:/vfs/ddd.txt

做JAVA的同学应该都知道 java.io.File类有一个lastModified方法,它返回一个修改时间,我们也可以通过这个方法来检测文件是否被修改过。


import org.junit.Test;  
  
import java.io.File;  
  
public class TestFileModified {  
    @Test  
    public void test(){  
        File file = new File("D:\\update.txt");  
        long lastModified = 0;  
        while(true){  
            if(file.lastModified()>lastModified){  
                lastModified=file.lastModified();  
                System.out.println("文件被修改, lastModified=" + lastModified);  
            }  
        }  
    }  
}
然后我们修改D盘下面的文件 就可以看到每次修改都会在控制台打印出对应的修改时间
文件被修改, lastModified=1480350296000  
文件被修改, lastModified=1493190808563  
文件被修改, lastModified=1493190812906
收藏00

登录 后评论。没有帐号? 注册 一个。