Независимые от платформы пути в Java

Я знаю относительный путь к файлу и хочу иметь возможность обрабатывать его как объект File как в Linux, так и в Windows.

Каков наилучший способ определения независящих от платформы путей в Java?

Ответ 1

Класс File содержит следующие общедоступные элементы, которые можно использовать для конкретных путей к файлу:

static String pathSeparator:
   Системный ключ-разделитель пути, представленный как строка для удобства.
static char pathSeparatorChar:
   Системно-зависимый символ-разделитель пути.
static String separator:
    Системно-зависимый символ-разделитель по умолчанию, представленный как строка для удобства. static char separatorChar:
    Системно-зависимый символ-разделитель по умолчанию.

Ответ 2

Просто используйте /. Я использую его в течение 20 лет. Никогда не проблема.

Ответ 3

Вы можете использовать любой разделитель путей в Java, он будет работать как в Unix, так и в Windows. Если вы все еще хотите использовать разделитель системных путей, существует свойство File.separator, которое даст вам право в зависимости от текущей системы.

Для корня вы можете использовать listRoots(), который дает вам массив root, в Unix-системах будет только один элемент, и столько, сколько у вас есть диски в Windows.

Ответ 4

Вы можете использовать статическое поле File.separator для получения символа разделителя платформы для путей к файлам

Ответ 5

Java довольно умна в отношении путей в объектах File. Я просто использую что-то вроде "../foo/bar", и он работает на этих двух платформах плюс MacOSX.

Ответ 6

java 7 также поддерживает использование Paths здесь

Путь получен путем вызова метода getPath для файловой системы по умолчанию.

Затем вы можете получить файл из него, позвонив:

File fileSystemObtainedFile = Paths.get("C:\\foo\\bar.txt").toFile();

Ответ 7

Лично мне нравится использовать класс Path из Eclipse для обработки путей вообще, который вы можете просто использовать автономно с небольшими изменениями, поскольку он достаточно изолирован.

http://grepcode.com/file/repository.grepcode.com/java/eclipse.org/3.5/org.eclipse.equinox/common/3.5.0/org/eclipse/core/runtime/Path.java/?v=source