Wydaje się, że istnieją trzy identyczne sposoby uzyskania niezależnego od platformy „separatora plików” zależnego od platformy:
Jak decydujemy, kiedy którego użyć?
Czy jest między nimi jakaś różnica?
Wydaje się, że istnieją trzy identyczne sposoby uzyskania niezależnego od platformy „separatora plików” zależnego od platformy:
Jak decydujemy, kiedy którego użyć?
Czy jest między nimi jakaś różnica?
Odpowiedzi:
System.getProperties()
można przesłonić wywołaniami do System.setProperty(String key, String value)
lub parametrami wiersza poleceń-Dfile.separator=/
File.separator
pobiera separator dla domyślnego systemu plików.
FileSystems.getDefault()
dostaje domyślny system plików.
FileSystem.getSeparator()
pobiera znak separatora dla systemu plików. Zwróć uwagę, że jako metody instancji możesz użyć tej metody do przekazywania różnych systemów plików do swojego kodu innych niż domyślny, w przypadkach, gdy kod ma działać na wielu systemach plików w jednej JVM.
FileSystem
instancję dla każdego systemu plików, z którym miałeś do czynienia.
Jeśli twój kod nie przekracza granic systemu plików, tj. Pracujesz tylko z jednym systemem plików, użyj java.io.File.separator
.
To, jak wyjaśniono, da ci domyślny separator dla twojego FS. Jak wyjaśnił Bringer128, System.getProperty("file.separator")
można go przesłonić opcjami wiersza poleceń i nie jest tak bezpieczny dla typu jak java.io.File.separator
.
Ostatni z nich java.nio.file.FileSystems.getDefault().getSeparator();
został wprowadzony w Javie 7, więc równie dobrze możesz go na razie zignorować, jeśli chcesz, aby Twój kod był przenośny w starszych wersjach Java.
Tak więc każda z tych opcji jest prawie taka sama jak inne, ale nie do końca. Wybierz taki, który odpowiada Twoim potrzebom.
java.io
przestarzałe na korzyść java.nio
?
java.io
jest nieco niższy niż java.nio
, ale nadal bardzo i szeroko przydatny. Możesz zobaczyć różnice tutaj: blogs.oracle.com/slc/entry/javanio_vs_javaio . nio
nie zastępuje io
, rozciąga ją na wiele sposobów (i wykorzystuje io
pod maską).