Подтвердить что ты не робот

Java.io.File(родительский, дочерний) не работает должным образом

Я пытаюсь построить объект Java File на основе предоставленного пользователем имени файла (может быть абсолютным или относительным) и базового каталога, зависящего от среды. В java-документе для java.io.File(родитель файла, дочерний элемент String) указано следующее:

Если строка дочернего пути является абсолютной, то она преобразуется в относительный путь зависящим от системы образом.

Это заставило меня подумать, что если у меня есть следующий код:

public class TestClass {
    public static void main(String[] args) throws IOException {
        File file = new File(new File("C:/Temp"),"C:/Temp/file.txt");
        System.out.println(file.getAbsolutePath());
    }
}

выход будет

C:\Temp\file.txt

и тогда я буду в бизнесе, потому что это не имеет большого значения, если пользователь предоставил абсолютный или относительный путь. Но на самом деле выход

C:\Temp\C:\Temp\file.txt

Это означает, что мне нужно выяснить точный относительный путь (или, по крайней мере, проверить различные параметры, чтобы увидеть, существует ли файл). Я неправильно понимаю JavaDoc?

4b9b3361

Ответ 1

Если строка дочернего пути является абсолютной, она преобразуется в относительный путь в зависимости от системы.

Я предполагаю, что это означает, что даже если вы предоставите абсолютный путь, он будет преобразован в (зависящий от системы) и обработан как относительный путь.

Это означает, что мне нужно выяснить точный относительный путь (или, по крайней мере, проверить различные параметры, чтобы увидеть, существует ли файл).

Да, я так считаю.

Это можно легко сделать с помощью

file.getAbsolutePath().startsWith(parent.getAbsolutePath());

чтобы проверить, является ли он абсолютным путем к каталогу в parent и

file.getAbsolutePath().substring(parent.getAbsolutePath().length());

чтобы получить относительную часть.