Уникально идентифицировать файл в Java - PullRequest
0 голосов
/ 26 декабря 2018

Я нахожусь в Linux, и мое приложение Java не предназначено для переносимости.

Я ищу способ уникальной идентификации файла в Java.Я могу использовать системный вызов statfs, поскольку пара (f_fsid, ino) однозначно идентифицирует файл (не только в файловой системе), как указано здесь: http://man7.org/linux/man-pages/man2/statfs.2.html

Вопрос в том, возможно ли этоизвлечь fsid из Java напрямую, чтобы я мог избежать написания функции JNI?

inode можно извлечь с помощью NIO, но как насчет fsid?inode и fsid имеют разную структуру и управляются разными системными вызовами ...

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Я бы предложил GIT-метод хэширования содержимого файла.Это доказательство против копирования и переименования.

Предполагается, что Java не зависит от платформы, поэтому использование методов, специфичных для Unix, может оказаться не совсем тем, что вам нужно.

0 голосов
/ 26 декабря 2018

Этот пример java демонстрирует, как получить номер inode файла unix.

import java.nio.file.*;
import java.nio.file.attribute.*;

public class MyFile {

  public static void main(String[] args) throws Exception  {

    BasicFileAttributes attr = null;
    Path path = Paths.get("MyFile.java");

    attr = Files.readAttributes(path, BasicFileAttributes.class);

    Object fileKey = attr.fileKey();
    String s = fileKey.toString();
    String inode = s.substring(s.indexOf("ino=") + 4, s.indexOf(")"));
    System.out.println("Inode: " + inode);
  }
}

Вывод

$ java MyFile
Inode: 664938

$ ls -i MyFile.java 
664938 MyFile.java

кредита, где кредит должен: https://www.javacodex.com/More-Examples/1/8

...