623 Stimmen

Wann sollte ich File.separator und wann File.pathSeparator 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?

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.

793voto

user489041 Punkte 26968

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

5 Stimmen

@Eddy Ich verstehe Ihren Standpunkt, aber es könnte redundant sein, da der Klassenname File . Ich denke, der Teil mit der Datei ist angedeutet. Aber wer weiß, warum sie vieles von dem, was sie mit Java gemacht haben, getan haben.

150voto

foxt7ot Punkte 2396

java.io.File Klasse enthält vier statische Trennungsvariablen. Zum besseren Verständnis, lassen Sie uns mit Hilfe von etwas Code verstehen

  1. Abscheider: Plattformabhängiges Standard-Namenstrennzeichen als String. Unter Windows ist es "\" und unter Unix "/".
  2. separatorChar: Wie Trennzeichen, aber ein Zeichen
  3. PfadTrennzeichen: Plattformabhängige Variable für Pfad-Trennzeichen. Für zum Beispiel PATH oder CLASSPATH variable Liste von Pfaden, die durch ':' in Unix-Systemen und ';' in Windows-Systemen
  4. pathSeparatorChar: Dasselbe wie pathSeparator, aber char

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");

2 Stimmen

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).

1 Stimmen

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

0 Stimmen

@DEV-Jacol es ist nicht ganz klar in Ihrem Kommentar, aber verwechseln Sie Linux und Unix? Denn sie sind nicht dasselbe :)

122voto

Karthik Ramachandran Punkte 11677

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);

6 Stimmen

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.

0 Stimmen

@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.com

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.

Powered by:

X