Кажется, есть три идентичных способа получить независимый от платформы «разделитель файлов» независимо от платформы:
Как мы решаем, когда использовать какой?
Есть ли разница между ними?
Кажется, есть три идентичных способа получить независимый от платформы «разделитель файлов» независимо от платформы:
Как мы решаем, когда использовать какой?
Есть ли разница между ними?
Ответы:
System.getProperties()
может быть переопределено вызовами System.setProperty(String key, String value)
или параметрами командной строки-Dfile.separator=/
File.separator
получает разделитель для файловой системы по умолчанию.
FileSystems.getDefault()
получает файловую систему по умолчанию.
FileSystem.getSeparator()
получает символ-разделитель для файловой системы. Обратите внимание, что в качестве метода экземпляра вы можете использовать его для передачи в ваш код других файловых систем, отличных от заданных по умолчанию, в тех случаях, когда вам нужен код для работы с несколькими файловыми системами в одной JVM.
FileSystem
экземпляр для каждой файловой системы, с которой вы работали .
Если ваш код не пересекает границы файловой системы, то есть вы просто работаете с одной файловой системой, используйте java.io.File.separator
.
Это, как объяснено, даст вам разделитель по умолчанию для вашей FS. Как объяснил Bringer128, System.getProperty("file.separator")
его можно переопределить с помощью параметров командной строки, и он не так безопасен как тип java.io.File.separator
.
Последний из них java.nio.file.FileSystems.getDefault().getSeparator();
был представлен в Java 7, так что вы можете пока игнорировать его, если хотите, чтобы ваш код переносился на более старые версии Java.
Итак, каждый из этих вариантов почти такой же, как другие, но не совсем. Выберите тот, который соответствует вашим потребностям.
java.io
рекомендуется в пользу java.nio
?
java.io
немного ниже, чем java.nio
, но все же очень и широко полезен. Вы можете увидеть различия здесь: blogs.oracle.com/slc/entry/javanio_vs_javaio . nio
не заменяет io
, расширяет его несколькими способами (и использует io
под капотом).