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 .