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

标签 java file-io file-attributes

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

最佳答案

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

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

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

编辑:

根据进一步的评论,有可能直接与文件系统属性进行交互。 提议的 Java 1.7 规范引入文件系统特定的属性 View 来直接与这些属性交互。您感兴趣的 View 是“DosFileAttributeView”。

基本用法可能与此类似(“输入”是基于 java“路径”的文件;添加必要的异常处理):

// 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)
    }
}

关于java - 如何知道文件之前是否被处理过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5445514/

相关文章:

c# - 应用文件夹图标更改

java - System.out 中的三元运算符

html - 如何使用 HTML 5 从服务器访问和下载文件

java - 将项目添加到资源文件

java - 在Java中,如何仅选择或过滤在特定时间段内创建的文件

java - 是否可以在 Java 中修改文本文件的特定行,而不会覆盖所有内容

php - 如何使用 PHP 更改文件的 Title 属性

Windows Batch,调用另一个批处理时的循环和文件属性

java - 如何从表中恢复数据并将其存储到列表中?

java - 空指针异常