如何知道之前是否处理过文件

时间:2011-03-26 21:41:54

标签: java file-io file-attributes

如何确定以前是否处理过某个文件?有一个远程存储位置,它是我的应用程序的文件源。我的程序从这个位置获取文件并以预定的方式处理它们。我怎样才能确定下次只获取未处理的文件?我正在考虑使用文件属性。存档和修改日期可以是一种解决方案。但我了解到没有使用两位文件属性。如何在Java中使用这些字段?顺便说一下,我不想使用数据库。

2 个答案:

答案 0 :(得分:3)

常见的策略是使用某种形式的哈希函数来创建校验和。记录文件的校验和,并将校验和标识的已处理文件列表与相关文件进行比较。如果有问题的文件的校验和在列表中,则表示您已对其进行了处理。

保护已处理的文件校验和列表。如果你失去它,或者它被破坏了,那可能是一个漫长而糟糕的一天。

为防止不必要的网络流量,您可以考虑在远程存储库上准备“check”文件,其中包含与潜在输入文件对应的校验和。

编辑:

进一步评论后,可能直接与文件系统属性进行交互。 提出的Java 1.7规范引入了特定于文件系统的属性视图,以直接与这些属性进行交互。您感兴趣的视图是'DosFileAttributeView'。

基本用法可能与此类似('input'是基于java'Path'的文件;添加必要的异常处理):

// import as necessary from java.nio.file and java.io

DosFileAttributeView view = input.getFileAttributeView(DosFileAttributeView.class);

//Check if the system supports this view 
if (view != null) 
{
    DosFileAttributes attributes = view.readAttributes();

    // skip any file already marked as an archive
    if (!attributes.isArchive()) 
    {
         myObject.process(input)
         attributes.setArchive(true)
    }
}

答案 1 :(得分:1)

您可以重命名该文件(例如“filename.archive”)吗?或者进入“archive”子目录?