我需要一个java程序,根据需要将新添加的文件列表返回到目录。我对新文件的定义是最后检查/扫描目录时没有的文件。
我知道有一些库,例如JNotify和java目录监视服务http://docs.oracle.com/javase/tutorial/essential/io/notification.html。但是在我的理解中,这些库实现了监视目录的监听器,并在发生某些文件事件(添加,删除,删除等)时立即通知。但我需要的是一种按需将新添加的文件列表返回到目录的方法。
答案 0 :(得分:1)
您可以通过维护呼叫者的上次请求时间戳来轻松实现此目的。然后将该时间戳传递给java类,该类将扫描目录以查找在该时间戳之后创建的文件。
类似的东西:
public List<File> getNewFiles(Date lastRequestedDate)
{
//Iterate the directory for files newer than the date passed in as parameter
}
答案 1 :(得分:1)
有不同的方法。
方法一:文件创建日期
您可能希望列出所有文件并检查每个文件的创建时间戳。已经有deep discussion on this topic了。只需检查时间戳是否大于上次检查目录时保存的时间戳。
方法二:创建和维护文件列表
如果您能负担得起内存和时间,请在目录中创建一个文件列表。迭代目录并将列表中尚未存在的所有文件添加到另一个列表中。做任何你需要做的事情并将它们添加到你的主列表中。
每次成功检查和处理文件后,您还应该序列化主列表并将其保存到磁盘。
答案 2 :(得分:0)
您可以维护文件名列表,并针对新文件进行检查
答案 3 :(得分:0)
我建议您使用Java目录监视服务。实施监视服务应该相当快。让它在后台运行;当它们发生时,它将保持排队事件 - add
,remove
,delete
。只要您的按需API需要已添加的文件列表,您只需执行以下操作:
add
事件类型并创建要返回的列表reset
API可以执行此操作)这种方法的好处是:
答案 4 :(得分:0)
您可以将文件指针保存在单独的文件中..每次需要新/旧文件时,都可以传递给下面的方法。
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 + "");
}
}
}