Java-совет: два разных пути могут вести к одному файлу
Сравнение через Path.equals() проверяет только сами пути. Поэтому эти значения считаются разными:
Path path1 = Path.of("data/report.txt");
Path path2 = Path.of("data/../data/report.txt");
Чтобы проверить, указывают ли они на один и тот же реальный файл, используйте:
boolean same = Files.isSameFile(path1, path2);
Метод учитывает:
- относительные и абсолютные пути;
- символические ссылки;
- особенности файловой системы;
- разные способы записи одного расположения.
Пример:
Path original = Path.of("/app/config.json");
Path symlink = Path.of("/app/current-config");
if (Files.isSameFile(original, symlink)) {
System.out.println("Это один файл");
}
Важно: метод обращается к файловой системе и может выбросить IOException.
Files.isSameFile() полезен перед копированием, перемещением или удалением файлов — особенно когда в проекте используются символические ссылки и нестандартные пути.
Сравнение через Path.equals() проверяет только сами пути. Поэтому эти значения считаются разными:
Path path1 = Path.of("data/report.txt");
Path path2 = Path.of("data/../data/report.txt");
Чтобы проверить, указывают ли они на один и тот же реальный файл, используйте:
boolean same = Files.isSameFile(path1, path2);
Метод учитывает:
- относительные и абсолютные пути;
- символические ссылки;
- особенности файловой системы;
- разные способы записи одного расположения.
Пример:
Path original = Path.of("/app/config.json");
Path symlink = Path.of("/app/current-config");
if (Files.isSameFile(original, symlink)) {
System.out.println("Это один файл");
}
Важно: метод обращается к файловой системе и может выбросить IOException.
Files.isSameFile() полезен перед копированием, перемещением или удалением файлов — особенно когда в проекте используются символические ссылки и нестандартные пути.