Перейти к основному содержимому

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

· 3 мин. чтения

1. Обзор

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

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

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

2. Разделитель файлов

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

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

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

Мы можем получить разделитель в виде строки , используя File.separator :

String fileSeparator = File.separator;

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

char fileSeparatorChar = File.separatorChar;

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

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 Class:

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

Давайте проверим это на Microsoft Windows:

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

Точно так же мы можем протестировать его на Linux или Mac:

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

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

3. Разделитель путей

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

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;
}

Давайте протестируем наш код на Microsoft Windows:

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

И он будет вести себя по-разному на Mac или Unix:

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

4. Вывод

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

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

Как всегда, код примера доступен на GitHub .