2015-11-11 4 views
0

Есть ли встроенный кросс-платформенный способ в Java для разбора строки пути Windows и извлечения корневого пути (включая букву диска) для Windows?Извлечение буквы диска из строки пути Windows

Согласно Java SE documentation, можно использовать класс java.nio.file.Path, например.

String path = "C:\\this\\is\\a\\windows\\file path.txt" 
Path p = Paths.get(path); 
String drive = p.getRoot(); 

Однако строительство Path объект OS-специфический, то есть, если приведенный выше код будет возвращать букву диска, только если она выполняется в Windows; в противном случае он просто возвращает null.

Конечно, можно использовать пользовательский подход (например, регулярное выражение или простоструйную обработку), чтобы получить букву диска, если она есть, но есть ли какой-либо межплатформенный путь, уже реализованный в Java для этого?

+0

* «Есть ли встроенный кросс-платформенный способ в Java для синтаксического анализа строки пути Windows и извлечения буквы диска?» * - Нет, поскольку этот вид побеждает цель «кросс-платформенной» – MadProgrammer

+0

Это наиболее конечно же, нет и даже документация Java SE для метода getRoot() 'подразумевает иное. По сути, приложениям должна быть предоставлена ​​возможность обрабатывать пути из всех операционных систем одинаково, независимо от ОС, на которых они работают. Это определение «кросс-платформенный», и класс Path нарушает это, вопреки его собственной документации. – PNS

+0

* «На самом деле, приложениям должна быть предоставлена ​​возможность обрабатывать пути из всех операционных систем одинаковым образом» * - Согласовано, но путь представляет собой концепцию ОС, и я имею в виду, что Windows является единственной ОС, которая имеет понятие буквы диска, корневой путь unix - это просто «/». Если мы говорим о точках монтирования, то это совсем другое, это моя точка зрения. Я не хочу спорить с вами об этом, у вас есть проблема, которую вы хотите решить, которую я не совсем понимаю, но, похоже, нашел другое рабочее решение. – MadProgrammer

ответ

1

Для получения корневого пути (например, диска) файла, как представляется, нет встроенного кросс-платформенного способа для получения корневого пути (например, диска), поэтому сторонняя библиотека или специальный код являются единственными решениями.

Apache Commons IO имеет класс FilenameUtils, а его метод getPrefix() делает именно то, что задал вопрос.

Смежные вопросы