Es scheint drei identische Möglichkeiten zu geben, um das plattformabhängige "Dateitrennzeichen" plattformunabhängig zu erhalten:
Wie entscheiden wir, wann wir welche verwenden?
Gibt es überhaupt einen Unterschied zwischen ihnen?
Es scheint drei identische Möglichkeiten zu geben, um das plattformabhängige "Dateitrennzeichen" plattformunabhängig zu erhalten:
Wie entscheiden wir, wann wir welche verwenden?
Gibt es überhaupt einen Unterschied zwischen ihnen?
Antworten:
System.getProperties()
kann durch Aufrufe von System.setProperty(String key, String value)
oder mit Befehlszeilenparametern überschrieben werden-Dfile.separator=/
File.separator
Ruft das Trennzeichen für das Standarddateisystem ab.
FileSystems.getDefault()
Erhält das Standard-Dateisystem.
FileSystem.getSeparator()
Ruft das Trennzeichen für das Dateisystem ab. Beachten Sie, dass Sie dies als Instanzmethode verwenden können, um andere Dateisysteme als die Standardmethode an Ihren Code zu übergeben, wenn Sie Ihren Code benötigen, um auf mehreren Dateisystemen in einer JVM zu arbeiten.
FileSystem
für jedes Dateisystem, mit dem Sie sich befasst haben, eine andere Instanz.
Wenn Ihr Code keine Dateisystemgrenzen überschreitet, dh Sie arbeiten nur mit einem Dateisystem, verwenden Sie java.io.File.separator
.
Dadurch erhalten Sie, wie erläutert, das Standardtrennzeichen für Ihren FS. Wie Bringer128 erklärt, System.getProperty("file.separator")
kann über Befehlszeilenoptionen überschrieben werden und ist nicht so typsicher wie java.io.File.separator
.
Die letzte java.nio.file.FileSystems.getDefault().getSeparator();
Version wurde in Java 7 eingeführt. Sie können sie daher vorerst ignorieren, wenn Sie möchten, dass Ihr Code auf ältere Java-Versionen portierbar ist.
Jede dieser Optionen ist fast dieselbe wie die anderen, aber nicht ganz. Wählen Sie eine, die Ihren Anforderungen entspricht.
java.io
zugunsten von veraltet java.nio
?
java.io
ist ein bisschen niedriger als java.nio
, aber immer noch sehr und weithin nützlich. Sie können die Unterschiede hier sehen: blogs.oracle.com/slc/entry/javanio_vs_javaio . nio
ersetzt nicht io
, es erweitert es auf mehrere Arten (und verwendet io
unter der Haube).