我有一个用例,我的模块在Linux文件系统上运行,应该通知远程Windows共享中的任何新文件。
这有内置功能吗?我做了一些基本的谷歌搜索,发现了一些filewatcher(C#中的Filesystemwatcher)。
对Java 6有用吗? FTP调用的简单性和高效性,我必须在文件出现时下载文件。
感谢。
答案 0 :(得分:2)
从java 7开始有一个文件监视器。有关此问题的跟踪,请参阅here。我不确定这是否适用于远程Windows共享,因此可能值得尝试一下。
如果你不能使用java 7那么可能值得使用ScheduledExecutor(从java 5开始)并手动检查远程目录的每x秒
不确定您建议的库是否需要java 7。编写扫描内容并不难,所以我在单元测试中为您编写了以下内容。我没有测试它,所以它可能有几个错误,但它应该几乎在那里。它基本上每秒扫描一个目录,然后打印到已添加或删除的sysout文件。它会检查您指定的目录和所有子目录。
public void test() {
ScheduledExecutorService ex = Executors.newSingleThreadScheduledExecutor();
ex.scheduleAtFixedRate(new Runnable(){
@Override
public void run() {
scanDirectory(new File("."));
}}, 1, 1, TimeUnit.SECONDS);
}
private void scanDirectory(File directory) {
Set<File> before = new HashSet<File>();
Set<File> after = new HashSet<File>();
addFiles(directory, after);
for (File f :after) {
if (!before.contains(f)) {
System.out.format("new file added %s", f);
}
}
for (File f :before) {
if (!after.contains(f)) {
System.out.format("file removed %s", f);
}
}
before.clear();
before.addAll(after);
}
private void addFiles(File file, Collection<File> allFiles) {
File[] files = file.listFiles();
if (files != null) {
for (File f : files) {
allFiles.add(f);
addFiles(f, allFiles);
}
}
}