File.separator vs FileSystem.getSeparator() vs System.getProperty( "file.separator" )?

Кажется, существует три одинаковых способа получить платформозависимую платформу "разделитель файлов" независимо:

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

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

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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