File.separator oder File.pathSeparator

519

In der FileKlasse gibt es zwei Zeichenfolgen separatorund pathSeparator.

Was ist der Unterschied? Wann sollte ich eins über das andere verwenden?

icnhzabot
quelle
6
Die Benennung ist etwas verwirrend, das schnelle, dass so etwas benötigt wird, ist einfach schrecklich (vgl. Perl). Schauen Sie sich die Beispiele für pathSeparatorChar und separatorChar an . Oder verwenden Sie die einfache Mnemonik: Der pathSeparator trennt Pfade.
Maaartinus
6
Eine Minute Zeit zu nehmen, um beide auf den Bildschirm zu drucken, hätte Ihre Frage beantwortet ...
Jean-François Corbett
13
Obwohl ich im Allgemeinen zustimmen würde, werden beim einfachen Drucken auf seinem System die Varianten für andere Betriebssysteme nicht angezeigt.
b1nary.atr0phy

Antworten:

681

Wenn du meinst File.separatorund File.pathSeparatordann:

  • File.pathSeparatorwird verwendet, um einzelne Dateipfade in einer Liste von Dateipfaden zu trennen. Betrachten Sie unter Windows die Umgebungsvariable PATH. Sie verwenden a ;, um die Dateipfade so zu trennen, wie es unter Windows File.pathSeparatorder Fall wäre ;.

  • File.separatorwird entweder /oder \wird verwendet, um den Pfad zu einer bestimmten Datei aufzuteilen. Zum Beispiel unter Windows ist es \oderC:\Documents\Test

user489041
quelle
6
Scheint wie File.separatorsollte in File.fileSeparatorBezug aufFile.pathSeparator
Eddy
1
@Eddy Ich verstehe Ihren Standpunkt, aber es könnte überflüssig sein, da der Klassenname ist File. Ich denke, der Dateiteil ist impliziert. Aber wer weiß, warum sie viel von dem gemacht haben, was sie mit Java gemacht haben.
user489041
117

Sie verwenden ein Trennzeichen, wenn Sie einen Dateipfad erstellen. In Unix ist das Trennzeichen also /. Wenn Sie also den Unix-Pfad erstellen /var/tempmöchten, gehen Sie folgendermaßen vor:

String path = File.separator + "var"+ File.separator + "temp"

Sie verwenden das, pathSeparatorwenn Sie mit einer Liste von Dateien wie in einem Klassenpfad arbeiten. Wenn Ihre App beispielsweise eine Liste von Gläsern als Argument verwendet hat, ist die Standardmethode zum Formatieren dieser Liste unter Unix:/path/to/jar1.jar:/path/to/jar2.jar:/path/to/jar3.jar

Bei einer Liste von Dateien würden Sie also Folgendes tun:

String listOfFiles = ...
String[] filePaths = listOfFiles.split(File.pathSeparator);
Karthik Ramachandran
quelle
5
Wenn Sie einen * nix-Pfad wie /var/tempdiesen File.separatorerstellen , ist die Verwendung nutzlos, da Sie bereits plattformabhängigen Code haben. Könnte auch den Pfad fest codieren.
Isapir
109

java.io.FileKlasse enthält vier statische Trennvariablen. Zum besseren Verständnis lassen Sie uns mit Hilfe von Code verstehen

  1. Trennzeichen: Plattformabhängiges Standard-Name-Trennzeichen als Zeichenfolge. Für Windows ist es '\' und für Unix ist es '/'
  2. separatorChar: Wie Separator, aber es ist char
  3. pathSeparator: Plattformabhängige Variable für das Pfadtrennzeichen. Beispiel: PATH- oder CLASSPATH-Variablenliste mit Pfaden, die in Unix-Systemen durch ':' und ';' getrennt sind. im Windows-System
  4. pathSeparatorChar: Wie pathSeparator, aber es ist char

Beachten Sie, dass alle diese Variablen endgültig und systemabhängig sind.

Hier ist das Java-Programm zum Drucken dieser Trennvariablen. FileSeparator.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 dem 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 unsere Programmplattform unabhängig zu machen, sollten wir immer diese Trennzeichen verwenden, um einen Dateipfad zu erstellen oder Systemvariablen wie PATH, CLASSPATH zu lesen.

Hier ist das Code-Snippet, das zeigt, wie Trennzeichen richtig verwendet werden.

//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");
foxt7ot
quelle
1
Beachten Sie, dass in Java das Backslash-Zeichen tatsächlich \\ ist, da ein einzelner Backslash das Escape-Zeichen für andere Kurzzeichen für Sonderzeichen ist, sodass der Backslash selbst verwendet wird, um sich selbst zu maskieren. Das Stringund, das charvon den oben genannten Methoden zurückgegeben wird, gibt den korrekt formatierten Backslash zurück (wenn unter Windows).
Erik
neue Datei ("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 ein Problem Unix
DEV-Jacol