Найти в Дзене

Java: Разделитель каталогов и разделитель путей

Разные операционные системы используют разные символы в качестве разделителей файлов и путей. Когда наше приложение должно работать на нескольких платформах, необходимо правильно обрабатывать эти различия. Java помогает выбрать подходящий разделитель и предоставляет функции для создания путей, корректно работающих на целевой операционной системе. В этом кратком руководстве мы рассмотрим, как писать код с использованием правильных разделителей файлов и путей. Разделитель файлов — это символ, используемый для разделения имён каталогов, составляющих путь к определённому месту. Существует несколько способов получить разделитель файлов в Java. Мы можем получить его как строку с помощью File.separator: String fileSeparator = File.separator; Также можно получить этот разделитель как символ с помощью File.separatorChar: char fileSeparatorChar = File.separatorChar; Начиная с Java 7, можно также использовать FileSystems: String fileSeparator = FileSystems.getDefault().getSeparator(); Вывод за
Оглавление

1. Обзор

Разные операционные системы используют разные символы в качестве разделителей файлов и путей. Когда наше приложение должно работать на нескольких платформах, необходимо правильно обрабатывать эти различия.

Java помогает выбрать подходящий разделитель и предоставляет функции для создания путей, корректно работающих на целевой операционной системе.

В этом кратком руководстве мы рассмотрим, как писать код с использованием правильных разделителей файлов и путей.

2. Разделитель файлов (File Separator)

Разделитель файлов — это символ, используемый для разделения имён каталогов, составляющих путь к определённому месту.

2.1. Получение разделителя файлов

Существует несколько способов получить разделитель файлов в Java.

Мы можем получить его как строку с помощью File.separator:

String fileSeparator = File.separator;

Также можно получить этот разделитель как символ с помощью File.separatorChar:

char fileSeparatorChar = File.separatorChar;

Начиная с Java 7, можно также использовать FileSystems:

String fileSeparator = FileSystems.getDefault().getSeparator();

Вывод зависит от операционной системы: на Windows это \, а на macOS и Unix-подобных системах — /.

2.2. Построение пути к файлу

Java предоставляет несколько способов для построения пути из списка каталогов.

Пример с использованием класса Paths:

Path path = Paths.get("dir1", "dir2");

Тест на Microsoft Windows:

assertEquals("dir1\\dir2", path.toString());

На Linux или Mac:

assertEquals("dir1/dir2", path.toString());

Также можно использовать класс File:

File file = new File("file1", "file2");

На Windows:

assertEquals("file1\\file2", file.toString());

На Linux или Mac:

assertEquals("file1/file2", file.toString());

Как видно, для построения пути не нужно вручную вставлять разделитель — достаточно передать строковые аргументы.

3. Разделитель путей (Path Separator)

Разделитель путей — это символ, обычно используемый ОС для разделения отдельных путей в списке путей.

3.1. Получение разделителя путей

Разделитель можно получить как строку с помощью File.pathSeparator:

String pathSeparator = File.pathSeparator;

Также можно получить его как символ:

char pathSeparatorChar = File.pathSeparatorChar;

Оба варианта возвращают разделитель путей. На Windows это точка с запятой (;), на Mac и Unix — двоеточие (:).

3.2. Построение списка путей

Можно построить строку из путей, используя разделитель как разделяющий символ.

Пример с методом String.join:

String[] pathNames = { "path1", "path2", "path3" };
String path = String.join(File.pathSeparator, pathNames);

На Windows:

assertEquals("path1;path2;path3", path);

На Linux или Mac:

assertEquals("path1:path2:path3", path);

Альтернатива — класс StringJoiner:

public static StringJoiner buildPathUsingStringJoiner(String path1, String path2) {
StringJoiner joiner = new StringJoiner(File.pathSeparator);
joiner.add(path1);
joiner.add(path2);
return joiner;
}

Тест на Windows:

assertEquals("path1;path2", buildPathUsingStringJoiner("path1", "path2"));

На Mac или Unix:

assertEquals("path1:path2", buildPathUsingStringJoiner("path1", "path2"));

4. Заключение

В этой краткой статье мы узнали, как строить пути с учётом специфики операционных систем, используя соответствующие разделители.

Мы увидели, как использовать встроенные классы Path и File для создания файловых путей, а также как получить нужный разделитель для использования в строковых операциях.

Оригинал статьи: https://www.baeldung.com/java-file-vs-file-path-separator