我需要一个 java 程序,它可以根据需要将新添加的文件列表返回到目录。我对新文件的定义是上次检查/扫描目录时不存在的文件。
我知道有 JNotify 等库和 java 目录监视服务http://docs.oracle.com/javase/tutorial/essential/io/notification.html。然而,据我了解,这些库实现了监听目录并在某些文件事件(添加、删除、删除等)发生时立即通知。但我需要的是一种按需将新添加的文件列表返回到目录的方法。
我需要一个 java 程序,它可以根据需要将新添加的文件列表返回到目录。我对新文件的定义是上次检查/扫描目录时不存在的文件。
我知道有 JNotify 等库和 java 目录监视服务http://docs.oracle.com/javase/tutorial/essential/io/notification.html。然而,据我了解,这些库实现了监听目录并在某些文件事件(添加、删除、删除等)发生时立即通知。但我需要的是一种按需将新添加的文件列表返回到目录的方法。
您可以通过维护调用者的最后请求时间戳轻松实现此目的。然后将该时间戳传递给一个 java 类,该类将扫描目录以查找在该时间戳之后创建的文件。
就像是:
public List<File> getNewFiles(Date lastRequestedDate)
{
//Iterate the directory for files newer than the date passed in as parameter
}
有不同的方法。
方法一:文件创建日期
您可能想要列出所有文件并检查每个文件的创建时间戳。已经有关于这个话题的深入讨论。只需检查时间戳是否大于您上次检查目录时保存的时间戳。
方法二:创建和维护文件列表
如果您负担得起内存和时间,请在目录中创建文件列表。遍历目录并将列表中尚未包含的所有文件添加到另一个列表中。对它们做任何你需要做的事情,并将它们添加到你的主列表中。
您还应该在每次成功检查和处理文件后序列化您的主列表并将其保存到磁盘。
您可以维护文件名列表并检查新文件
您可以在单独的文件中维护文件指针。每次需要新/旧文件时,您都可以传递到以下方法。
package test;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.Arrays;
import java.util.Date;
import org.apache.commons.io.comparator.LastModifiedFileComparator;
import org.apache.commons.io.filefilter.AgeFileFilter;
public class AgeFileFilterTest {
public static void main(String[] args) throws IOException {
String directoryPath = "/home/vikas";
String fileName = "fileName";
File directory = new File(directoryPath);
File[] files = directory.listFiles();
System.out.println("\nBefore ");
displayFiles(directory, new AgeFileFilter(new File(directoryPath+FileName) , true));
System.out.println("\nAfter " );
displayFiles(directory, new AgeFileFilter(new File(directoryPath+FileName),false));
}
public static void displayFiles(File directory, FileFilter fileFilter) {
File[] files = directory.listFiles(fileFilter);
Arrays.sort(files, LastModifiedFileComparator.LASTMODIFIED_COMPARATOR);
for (File file : files) {
Date lastMod = new Date(file.lastModified());
System.out.println("File: " + file.getName() + ", Date: " + lastMod + "");
}
}
}
我建议您使用 Java 目录监视服务。实施监视服务应该相当快。让它在后台运行;它将继续排队事件 - add
, remove
, delete
- 当它们发生时。每当您的按需 API 需要已添加的文件列表时,您只需执行以下操作:
add
事件类型并创建要返回的列表reset
API 可以执行此操作)这种方法的好处是: