Difference between File.separator and slash in paths
Разница между File.separator и косой чертой в путях
В чем разница между использованием File.separator и обычной / строкой пути Java?
В отличие от двойной обратной косой черты, \\ независимость от платформы, похоже, не является причиной, поскольку обе версии работают под Windows и Unix.
Перефразируя вопрос, если / работает в Unix и Windows, зачем вообще нужно использовать File.separator?
Переведено автоматически
Ответ 1
Вы используете File.separator, потому что когда-нибудь ваша программа может работать на платформе, разработанной в далекой стране, стране странных вещей и незнакомых людей, где лошади плачут, а коровы управляют всеми лифтами. В этой стране люди традиционно использовали символ ":" в качестве разделителя файлов, и поэтому JVM послушно подчиняется их пожеланиям.
Ответ 2
Благодаря библиотекам Java для работы с файлами вы можете безопасно использовать / (косую черту, а не обратную косую черту) на всех платформах. Код библиотеки обрабатывает внутренний перевод данных в пути, зависящие от платформы.
Однако вы можете захотеть использовать File.separator в пользовательском интерфейсе, потому что лучше всего показать людям, что будет иметь смысл в их ОС, а не то, что имеет смысл для Java.
Обновление: за пять минут поиска я не смог найти документально подтвержденное поведение "вы всегда можете использовать косую черту". Теперь я уверен, что видел это задокументированным, но из-за отсутствия официальной ссылки (потому что моя память не идеальна) я бы придерживался использования, File.separator потому что вы знаете, что это сработает.
Ответ 3
Хотя использование File.separator для ссылки на имя файла является излишеством (для тех, кто воображает далекие страны, я полагаю, что их реализация JVM заменила бы / на : точно так же, как Windows jvm заменяет его на \).
Однако иногда вы получаете ссылку на файл, а не создаете ее, и вам нужно проанализировать ее, и чтобы иметь возможность это сделать, вам нужно знать разделитель на платформе. File.separator поможет вам сделать это.
Ответ 4
Хорошо, давайте проверим некоторый код.
File.java строки с 428 по 435 в File.<init>:
Stringp= uri.getPath(); if (p.equals("")) thrownewIllegalArgumentException("URI path component is empty");
// Okay, now initialize p = fs.fromURIPath(p); if (File.separatorChar != '/') p = p.replace('/', File.separatorChar);
И давайте почитаем fs/*(FileSystem)*/.fromURIPath() документы:
java.io.FileSystem общедоступная абстрактная строка fromURIPath (строковый путь) При необходимости обработайте заданную строку пути URI. Это используется в win32, например, для преобразования "/c:/foo" в "c:/foo". Строка path по-прежнему содержит разделители косой черты; код в классе File переведет их после возврата этого метода.
Это означает, что FileSystem.fromURIPath() выполняет постобработку пути URI только в Windows, и потому в следующей строке:
p = p.replace('/', File.separatorChar);
Он заменяет каждое '/' на зависящее от системы seperatorChar, вы всегда можете быть уверены, что '/' безопасно в каждой операционной системе.