Рубрики
Без рубрики

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

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

Автор оригинала: baeldung.

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 :

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 :

char pathSeparatorChar = File.pathSeparatorChar;

Оба примера возвращают разделитель путей. Это точка с запятой (; ) в Windows и двоеточие (:) в операционных системах Mac и Unix.

3.2. Создайте путь к файлу

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

Давайте попробуем Давайте попробуем метод:

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

Аналогично, мы можем использовать Соединитель строк класс:

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 для построения путей к файлам, и мы видели, как получить необходимый разделитель для использования с утилитами String concatenation.

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