Файл.разделитель vs файловая система.getSeparator () vs System.getProperty ("файл.разделитель")?

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

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

есть ли хоть какая-либо разница между ними?

2 ответов


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

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

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

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


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

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

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

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