java.io.File (parent, child) не работает должным образом - PullRequest
11 голосов
/ 01 сентября 2011

Я пытаюсь создать объект Java-файла на основе предоставленного пользователем имени файла (может быть абсолютным или относительным) и зависящего от среды базового каталога.Документ 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?

1 Ответ

8 голосов
/ 01 сентября 2011

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

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

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

Да, я верю.

Возможно, это легко сделать с помощью

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...