JAVA path.getName (0) возвращает весь путь вместо первого элемента в Ma c с windows путем - PullRequest
0 голосов
/ 01 августа 2020

Я подозреваю, что это ошибка новичка с моей стороны. С Java 13 и следующим методом:

    public static void winPath (){
        Path winPath = Paths.get("C:\\the\\wizards\\despicable\\cat");
        System.out.println(String.format("First element of %s is: %s", winPath.toString(), winPath.getName(0)));
    }

Вызывая этот метод, я ожидал бы получить:

First element of C:\the\wizards\despicable\cat is: the

Вместо этого я получаю весь путь:

First element of C:\the\wizards\despicable\cat is: C:\the\wizards\despicable\cat

Это неожиданное поведение для меня, потому что, если я попробую то же самое с путем macos:

 public static void macPath (){
        Path macpath = Paths.get("/Volumes/Multimedia/the/wizards/despicable/cat");
        System.out.println(String.format("First element of %s is: %s", macpath.toString(), macpath.getName(0)));
    }

... результат будет таким, как я надеялся:

First element of /Volumes/Multimedia/the/wizards/despicable/cat is: Volumes

Любая помощь будет оценена!

1 Ответ

1 голос
/ 01 августа 2020

Path не разделит вашу строку на разные элементы, когда вы выполните это в системе, отличной от Windows, потому что он не распознает разделитель файлов, поэтому для создания пути, в котором каждый диск / папка / файл является другим элементом вам нужно создать его вот так

Path winPath = Paths.get("C:", "\\the", "\\wizards", "\\despicable", "\\cat");

или даже лучше, так как вы не хотите, чтобы \ included

Path winPath = Paths.get("C:", "the", "wizards", "despicable", "cat");

Затем вы можете перебирать свои элементы

winPath.forEach( p ->
    System.out.println(p)
);

Вот почему ваш второй пример работает должным образом при запуске на машине Ma c (или Linux / Unix).

Paths.get("/Volumes/Multimedia/the/wizards/despicable/cat");

разделит заданный путь на разные элементы, "Volume "," Мультимедиа "и т. Д.

...