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