Здається, є три однакових способи незалежно від платформи "роздільник файлів" залежно від платформи:
Як ми вирішуємо, коли використовувати який?
Чи є навіть різниця між ними?
Здається, є три однакових способи незалежно від платформи "роздільник файлів" залежно від платформи:
Як ми вирішуємо, коли використовувати який?
Чи є навіть різниця між ними?
Відповіді:
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
під кришкою).