我需要一个java程序,根据需要将新添加的文件列表返回到目录。我对新文件的定义是在最后检查/扫描目录时没有的文件。Java:从目录中获取新文件的列表
我知道有一些库,如JNotify和java目录监视服务http://docs.oracle.com/javase/tutorial/essential/io/notification.html。然而,在我的理解中,这些库实现监听目录的侦听器,并在发生某些文件事件(添加,删除,删除等)时立即通知。但我需要的是一种按需返回新增文件列表到目录的方法。
我需要一个java程序,根据需要将新添加的文件列表返回到目录。我对新文件的定义是在最后检查/扫描目录时没有的文件。Java:从目录中获取新文件的列表
我知道有一些库,如JNotify和java目录监视服务http://docs.oracle.com/javase/tutorial/essential/io/notification.html。然而,在我的理解中,这些库实现监听目录的侦听器,并在发生某些文件事件(添加,删除,删除等)时立即通知。但我需要的是一种按需返回新增文件列表到目录的方法。
您可以维护的文件名列表,并检查针对新文件
不需要维护文件列表您可以在最后一次请求时存储时间戳,然后返回 – Manish 2013-03-18 11:18:02
@Manish是的,这是一个好主意 – 2013-03-18 11:24:47
您可以通过保持最后的请求时间戳和呼叫者轻松实现这一点。然后将该时间戳传递给一个java类,该类将扫描目录以查找该时间戳后创建的文件。
喜欢的东西:
public List<File> getNewFiles(Date lastRequestedDate)
{
//Iterate the directory for files newer than the date passed in as parameter
}
Manish感谢这个想法,实际上我正在寻找一些已经完成的工作的链接,并且将它重新用于我自己的工作,广告重用是一种很好的做法。但是如果我没有及时得到它,那么搜索过程可能比它节省的时间要长。 – Nadeem 2013-03-18 12:58:53
有不同的做法。
方法之一:文件创建日期
您可能要列出所有文件,并检查每个文件的创建时间戳记。已经有一个deep discussion on this topic。只要检查时间戳是否大于上次检查目录时保存的时间戳。
方法二:创建和维护文件
如果你能负担得起的内存和时间,在目录中创建的文件列表清单。迭代目录并将列表中尚未包含的所有文件添加到另一个列表中。做任何你需要做的事情,并将它们添加到你的主列表中。
在每次成功检查并处理文件之后,您还应该序列化主列表并将其保存到磁盘。
我建议你去用Java目录观看服务。实施监视服务应该相当快。让它在后台运行;它将保持排队事件 - add
,remove
,delete
- 当它们发生时。每当您点播API需要已添加的文件列表,你只需要做到以下几点:
add
事件类型和创建列表中返回reset
API来做到这一点)好处这种方法将是:
你可以维护一个文件指针在不同的文件..每当你需要新/旧文件,你可以传入下面的方法。
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 + "");
}
}
}
新相比有什么补充?自上次运行以来创建? “新加入”是什么意思? – david99world 2013-03-18 11:14:59
@ david99world正如我所说的那样:“新加入的是最后一次调用时不存在的那个,即检查/扫描目录 – Nadeem 2013-03-18 13:03:52