In der File
Klasse gibt es zwei Zeichenketten, separator
y pathSeparator
.
Was ist der Unterschied? Wann sollte ich das eine und wann das andere verwenden?
In der File
Klasse gibt es zwei Zeichenketten, separator
y pathSeparator
.
Was ist der Unterschied? Wann sollte ich das eine und wann das andere verwenden?
Wenn Sie meinen File.separator
y File.pathSeparator
dann:
File.pathSeparator
wird verwendet, um einzelne Dateipfade in einer Liste von Dateipfaden zu trennen. Unter Windows ist dies die Umgebungsvariable PATH. Sie verwenden eine ;
um die Dateipfade zu trennen, so dass unter Windows File.pathSeparator
wäre ;
.
File.separator
ist entweder /
o \
die verwendet wird, um den Pfad zu einer bestimmten Datei aufzuteilen. Unter Windows lautet er zum Beispiel \
o C:\Documents\Test
java.io.File
Klasse enthält vier statische Trennungsvariablen. Zum besseren Verständnis, lassen Sie uns mit Hilfe von etwas Code verstehen
Beachten Sie, dass es sich hierbei um endgültige Variablen handelt, die vom System abhängig sind.
Hier ist das Java-Programm zum Drucken dieser Trennvariablen. DateiTrennzeichen.java
import java.io.File;
public class FileSeparator {
public static void main(String[] args) {
System.out.println("File.separator = "+File.separator);
System.out.println("File.separatorChar = "+File.separatorChar);
System.out.println("File.pathSeparator = "+File.pathSeparator);
System.out.println("File.pathSeparatorChar = "+File.pathSeparatorChar);
}
}
Ausgabe des obigen Programms auf einem Unix-System:
File.separator = /
File.separatorChar = /
File.pathSeparator = :
File.pathSeparatorChar = :
Ausgabe des Programms auf dem Windows-System:
File.separator = \
File.separatorChar = \
File.pathSeparator = ;
File.pathSeparatorChar = ;
Um unser Programm plattformunabhängig zu machen, sollten wir immer diese Trennzeichen verwenden, um Dateipfade zu erstellen oder Systemvariablen wie PATH, CLASSPATH zu lesen.
Das folgende Codeschnipsel zeigt, wie man Trennzeichen richtig verwendet.
//no platform independence, good for Unix systems
File fileUnsafe = new File("tmp/abc.txt");
//platform independent and safe to use across Unix and Windows
File fileSafe = new File("tmp"+File.separator+"abc.txt");
Beachten Sie, dass in Java das Backslash-Zeichen eigentlich \\ da ein einzelner Backslash das Escape-Zeichen für andere Sonderzeichen ist, so dass der Backslash selbst als Escape-Zeichen verwendet wird. Der String
y char
die von den oben genannten Methoden zurückgegeben werden, geben den korrekt formatierten Backslash zurück (falls unter Windows).
New File("tmp/abc.txt"); dies ist korrekt für Windows und Linux, aber nicht korrekt für Unix new File("tmp \\abc.txt "); dies ist nur unter Unix ein Problem
Sie verwenden Trennzeichen, wenn Sie einen Dateipfad erstellen. Unter Unix ist das Trennzeichen also /
. Wenn Sie also den Unix-Pfad bauen wollten /var/temp
würden Sie es so machen:
String path = File.separator + "var"+ File.separator + "temp"
Sie verwenden die pathSeparator
wenn Sie mit einer Liste von Dateien wie in einem Klassenpfad arbeiten. Wenn Ihre Anwendung zum Beispiel eine Liste von Jars als Argument nimmt, ist der Standardweg, diese Liste unter Unix zu formatieren: /path/to/jar1.jar:/path/to/jar2.jar:/path/to/jar3.jar
Bei einer Liste von Dateien würden Sie also etwa so vorgehen:
String listOfFiles = ...
String[] filePaths = listOfFiles.split(File.pathSeparator);
Wenn Sie einen *nix-Pfad erstellen wie /var/temp
dann ist es nutzlos, die File.separator
da Sie bereits plattformabhängigen Code haben. Sie können den Pfad auch fest codieren.
@isapir Ja, ich verwende File.separator immer seltener. Wenn man einen Pfad generiert und in einer Datei (oder einer Datenbank) gespeichert hat, der zu einem anderen System führt, wird die Verwendung von File.separator unter Win und das anschließende Verschieben nach Linux nur ein Problem verursachen. Sicherer ist es, einfach "/" zu verwenden. Ich habe mich gefragt, ob jemand einen Grund kennt, etwas anderes zu tun, aber ich sehe hier keinen.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
7 Stimmen
Die Namensgebung ist etwas verwirrend, die Schnelligkeit, mit der so etwas benötigt wird, ist einfach schrecklich (vgl. Perl). Sehen Sie sich die Beispiele für pathSeparatorChar y separatorChar . Oder verwenden Sie die einfache Mnemotechnik: Der pathSeparator trennt Pfade.
7 Stimmen
Wenn Sie sich eine Minute Zeit nehmen, um beide auf dem Bildschirm auszudrucken, wäre Ihre Frage beantwortet...
18 Stimmen
Ich stimme zwar grundsätzlich zu, aber ein einfacher Ausdruck auf seinem System wird die Unterschiede nicht aufzeigen.