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?
Ответы
Ответ 1
Если строка дочернего пути является абсолютной, она преобразуется в относительный путь в зависимости от системы.
Я предполагаю, что это означает, что даже если вы предоставите абсолютный путь, он будет преобразован в (зависящий от системы) и обработан как относительный путь.
Это означает, что мне нужно выяснить точный относительный путь (или, по крайней мере, проверить различные параметры, чтобы увидеть, существует ли файл).
Да, я так считаю.
Это можно легко сделать с помощью
file.getAbsolutePath().startsWith(parent.getAbsolutePath());
чтобы проверить, является ли он абсолютным путем к каталогу в parent
и
file.getAbsolutePath().substring(parent.getAbsolutePath().length());
чтобы получить относительную часть.