Как узнать, был ли файл обработан ранее - PullRequest
2 голосов
/ 27 марта 2011

Как я могу быть уверен, что файл был обработан раньше? Существует удаленное хранилище, которое является источником файлов для моего приложения. Моя программа получает файлы из этого места и обрабатывает их по расписанию. Как я могу быть уверен, что в следующий раз я получу только необработанные файлы? Я думаю об использовании атрибутов файла. Архив и измененная дата могут быть решением. Но я узнал, что два бита атрибутов файла не используются. Как я могу использовать эти поля в Java? Кстати, я не хочу использовать базу данных.

Ответы [ 2 ]

3 голосов
/ 27 марта 2011

Обычная стратегия - использовать некоторую форму хеш-функции для создания контрольной суммы.Запишите контрольную сумму файла и сравните список обработанных файлов, идентифицированных контрольной суммой, с данным файлом.Если контрольная сумма рассматриваемого файла находится в списке, вы уже обработали его.

Защитите свой список обработанных контрольных сумм файлов.Если вы потеряете его или он будет поврежден, это может быть долгий, плохой день.

Чтобы предотвратить ненужный сетевой трафик, вы можете подготовить файлы проверки в удаленном хранилище, содержащие контрольную сумму, соответствующуюпотенциальный входной файл.

РЕДАКТИРОВАТЬ:

После дальнейшего комментария, возможно, возможно напрямую взаимодействовать с атрибутами файловой системы.В предложенной спецификации Java 1.7 представлены представления атрибутов, специфичные для файловой системы, для непосредственного взаимодействия с этими атрибутами.Представление, которое вас заинтересует, это DosFileAttributeView.

Базовое использование может быть примерно таким:

// 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 голос
/ 27 марта 2011

Можете ли вы переименовать файл (например, «filename.archive»)?или в подкаталог "архив"?

...