Ответ
Нет, разделители путей по умолчанию различаются.
| Система | Разделитель каталогов | Пример абсолютного пути |
|---|---|---|
| Windows | Обратная косая черта () |
C:UsersDocumentfile.txt |
| Unix/Linux/macOS | Прямая косая черта (/) |
/home/user/document/file.txt |
Как правильно работать с путями в Java для кроссплатформенности?
-
Использовать класс
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 -
Использовать константу
File.separator:String path = "dir" + File.separator + "file.txt"; -
Использовать прямую черту (
/) в строковых литералах: Виртуальная машина Java (JVM) на Windows автоматически корректно интерпретирует/при работе с классамиFileилиPath.// Этот код будет работать и на Windows, и на Unix File file = new File("src/main/resources/config.yml");
Вывод: Для написания переносимого кода всегда предпочитайте Paths.get() или File.separator ручной конкатенации строк с жёстко заданными разделителями.
Ответ 18+ 🔞
А, ну вот, классика, блядь! Опять эти пути, как будто впервые слышу, ёпта! Сидишь такой, пишешь код, и тут — бац! — на тебе, сука, обратный слеш, а не тот, который надо. И всё, пиздец, программа на линуксе как корова на льду, а ты сидишь и думаешь: «Ну что за мудак это писал?» А мудак-то — ты сам, блядь!
Смотри сюда, чтобы не быть таким же, как я в тот раз. Запомни раз и нахуй:
| Система | Разделитель, блядь | Пример, чтобы было понятно даже идиоту |
|---|---|---|
| Windows | Обратная косая () |
C:UsersDocumentfile.txt |
| Unix/Linux/macOS | Прямая косая (/) |
/home/user/document/file.txt |
Видишь разницу? Одна система как будто зеркальная, блядь! Ну и как с этим жить, чтобы не обосраться? А вот как, слушай:
Первое и главное — используй java.nio.file.Path. Это твой новый бог, идол и спаситель, блядь!
// Сделай вот так, и JVM сама всё порешает, как взрослая
Path path = Paths.get("myDir", "subDir", "file.txt");
System.out.println(path); // На Линуксе: myDir/subDir/file.txt
// На Винде: myDirsubDirfile.txt
Видишь? Никаких танцев с бубном. Просто сказал, что соединить, а система сама подставит свой родной, ёбаный, разделитель. Красота, в рот меня чих-пых!
Второй вариант — константа File.separator. Ну, если ты старовер и любишь по-старому.
String path = "dir" + File.separator + "file.txt";
Работает, конечно, но выглядит как костыль из прошлого века, блядь. Но работает!
И третий лайфхак для ленивых — просто пиши / везде!
// Да-да, вот так вот, нагло. И Винда проглотит.
File file = new File("src/main/resources/config.yml");
JVM на Винде — хитрая жопа, она сама поймёт, что ты имел в виду, и подменит слеш на свой, родной, кривой. Но это, конечно, не отменяет того, что лучше использовать первый способ, как нормальный человек.
Итог, блядь, простой, как три копейки: не выёбывайся, не строй из себя умника с конкатенацией строк. Бери Paths.get() и живи спокойно. А то будешь потом, как я, искать, почему на сервере всё падает, а у тебя на компе — летает. Пиздец и позор.