File.separator против FileSystem.getSeparator () против System.getProperty ("file.separator")? - PullRequest
119 голосов
/ 10 ноября 2011

Существует три идентичных способа получения независимого от платформы "разделителя файлов" независимо от платформы:

Как мы решаем, когда использовать какой?

Есть ли разница между ними?

Ответы [ 2 ]

129 голосов
/ 10 ноября 2011

System.getProperties() может быть переопределено вызовом System.setProperty(String key, String value) или параметрами командной строки -Dfile.separator=/

File.separator получает разделитель для файловой системы по умолчанию.

FileSystems.getDefault() возвращает вам файловую систему по умолчанию.

FileSystem.getSeparator() возвращает символ разделителя для файловой системы. Обратите внимание, что в качестве метода экземпляра вы можете использовать его для передачи в ваш код других файловых систем, отличных от стандартных, в тех случаях, когда вам требуется, чтобы ваш код работал на нескольких файловых системах в одной JVM.

29 голосов
/ 10 ноября 2011

Если ваш код не пересекает границы файловой системы, то есть вы просто работаете с одной файловой системой, тогда используйте java.io.File.separator.

Это, как объяснено, даст вам разделитель по умолчанию для вашей FS. Как объяснил Bringer128, System.getProperty("file.separator") может быть переопределено с помощью параметров командной строки и не является безопасным по типу, как java.io.File.separator.

Последний, java.nio.file.FileSystems.getDefault().getSeparator(); был введен в Java 7, так что вы можете на этот момент проигнорировать его, если хотите, чтобы ваш код переносился на более старые версии Java.

Итак, каждый из этих вариантов почти такой же, как другие, но не совсем. Выберите тот, который соответствует вашим потребностям.

...