Java7 / Path / File / получить уникальный идентификатор, такой как Inode файла - PullRequest
1 голос
/ 21 ноября 2011

Как получить уникальный идентификатор из экземпляра Path или File, который должен иметь Inode или другой уникальный идентификатор в файловой системе "не Linux / Unix"?В API ничего не могу найти, мне нужно использовать JNI?

Редактировать: У меня есть две причины:

  • Я хочу получить уникальное сопоставление из файла вфайловая система в древовидном представлении в системе базы данных.
  • Я хочу обнаружить переименования файла, что приводит к событию удаления и новому событию вставки при просмотре Path через WatchService (вминимум для файловых систем Linux / Unix).Поэтому я не могу использовать Path для обнаружения таких переименований.

Кстати: сначала я думал, что WatchService вызовет событие java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY в случае переименования, но я предполагаю, что это файловая системазависит и / или происходит только в случае изменения самого содержимого файла.

Итак, я полагаю, мне действительно пришлось бы использовать JNI-привязку для обнаружения переименований и, возможно, перемещений?

Редактировать: Мне кажетсянаконец-то нашли, как получить уникальное представление файла: http://download.oracle.com/javase/7/docs/api/java/nio/file/attribute/BasicFileAttributes.html#fileKey()

Ответы [ 2 ]

3 голосов
/ 21 ноября 2011

Если вам нужен только уникальный идентификатор, вы можете хэшировать путь к файлу (используя sha1), и он даст вам уникальный текстовый идентификатор .

Если вам нужен реальный идентификатор, связанный с файлом, вам нужно использовать JNI и иметь собственную библиотеку для каждой ОС.

0 голосов
/ 21 ноября 2011

UNC-путь будет уникальным ключом: "/ / SERVER / PATH / PATH / FILENAME" с дополнительным File.getCanonicalPath ().По крайней мере, в Windows, в отличие от букв дисков.

...