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.
Итак, каждый из этих вариантов почти такой же, как и другие, но не совсем. Выберите тот, который вам подходит.