Одинаковы ли разделители путей (delimiters) в Windows и Unix-подобных системах?

«Одинаковы ли разделители путей (delimiters) в Windows и Unix-подобных системах?» — вопрос из категории Сети, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, разделители путей по умолчанию различаются.

Система Разделитель каталогов Пример абсолютного пути
Windows Обратная косая черта () C:UsersDocumentfile.txt
Unix/Linux/macOS Прямая косая черта (/) /home/user/document/file.txt

Как правильно работать с путями в Java для кроссплатформенности?

  1. Использовать класс java.nio.file.Path и Paths.get() (рекомендуется):

    // JVM автоматически использует корректный разделитель
    Path path = Paths.get("myDir", "subDir", "file.txt");
    System.out.println(path); // На Unix: myDir/subDir/file.txt
                              // На Windows: myDirsubDirfile.txt
  2. Использовать константу File.separator:

    String path = "dir" + File.separator + "file.txt";
  3. Использовать прямую черту (/) в строковых литералах: Виртуальная машина Java (JVM) на Windows автоматически корректно интерпретирует / при работе с классами File или Path.

    // Этот код будет работать и на Windows, и на Unix
    File file = new File("src/main/resources/config.yml");

Вывод: Для написания переносимого кода всегда предпочитайте Paths.get() или File.separator ручной конкатенации строк с жёстко заданными разделителями.