Как понять метод Java Path.toString () - PullRequest
0 голосов
/ 22 февраля 2019

Мои коды:

Path uploadPath = Paths.get("D:\\0.hzg\\");
System.out.println(uploadPath);

Вывод:

D:\0.hzg

Как понять схему метода toString()Path здесь?

Я думал, что он должен вывести D:\0.hzg\, поскольку 0.hzg - это путь вместо файла.


update:

        System.out.println(Paths.get("-","A", "B")); 
        System.out.println(Paths.get("/","A", "B")); 
        System.out.println(Paths.get("\\","A", "B"));

выходы:

-\A\B
\\A\B\
\\A\B\

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

[Paths] метод get создает путь только путем заботы system-file-separator , который поможет в кроссплатформенном выполнении программ, например,

System.out.println(Paths.get(File.separator,"A", "B"));

вернет

В Windows: \\ A \ B \

В Unix: / A / B /

Сведения о File.separator равны

Системно-зависимый символ разделителя имен по умолчанию.Это поле инициализируется, чтобы содержать первый символ значения systemmproperty file.separator.В системах UNIX значение этого поля равно '/';в системах Microsoft Windows это '\'.

Специфично для задаваемого вопроса

Я считаю, что это из-за Абсолютного пути
, например, в Windows JDK1.7

System.out.println(Paths.get("C:","A", "B")); **Output** : C:\A\B
System.out.println(Paths.get("C:","A", "0.hzg")); **Output** : C:\A\0.hzg


System.out.println(Paths.get(File.separator,"A", "B")); **Output** : \\A\B\
System.out.println(Paths.get(File.separator,"A", "0.hzg")); **Output** : \\A\0.hzg\

Надежды, которые помогают

0 голосов
/ 22 февраля 2019

Path не делает никаких I/O, чтобы проверить, является ли это каталогом или обычным файлом.Это служебный класс для работы с зависимым от платформы представлением строки пути к файловой системе (вы определенно не хотите разбивать строки на / или сами находить букву диска).Цитирование javadoc https://docs.oracle.com/javase/7/docs/api/java/nio/file/Path.html#toString()

Объект, который можно использовать для поиска файла в файловой системе.Обычно он представляет собой системно-зависимый путь к файлу.

Кроме того, конечные разделители не учитываются (см., Например, endsWith описание метода)

Обратите внимание, что конечныйразделители не учитываются, и поэтому вызов этого метода для пути "foo / bar" со строкой "bar /" возвращает true.

...