File.separator o File.pathSeparator

519

En la Fileclase hay dos cadenas, separatory pathSeparator.

¿Cual es la diferencia? ¿Cuándo debo usar uno sobre el otro?

icnhzabot
fuente
66
El nombramiento es un poco confuso, el rápido que se necesita algo como esto es simplemente terrible (cf. Perl). Mire los ejemplos de pathSeparatorChar y separatorChar . O use la mnemotecnia simple: el pathSeparator separa los caminos.
maaartinus
66
Tomar un minuto para imprimirlos en la pantalla habría respondido su pregunta ...
Jean-François Corbett
13
Aunque generalmente estoy de acuerdo, simplemente imprimirlos en su sistema no mostrará las variantes para otros sistemas operativos.
b1nary.atr0phy

Respuestas:

680

Si quieres decir File.separatory File.pathSeparatorluego:

  • File.pathSeparatorse usa para separar rutas de archivos individuales en una lista de rutas de archivos. Considere en Windows, la variable de entorno PATH. Usas un; para separar las rutas de archivos de Windows así sucesivamente File.pathSeparatorsería ;.

  • File.separatores /o \eso se usa para dividir la ruta a un archivo específico. Por ejemplo en Windows es \oC:\Documents\Test

usuario489041
fuente
66
Parece que File.separatordebería estar File.fileSeparatorrelacionado conFile.pathSeparator
Eddy
1
@ Eddy Veo tu punto, pero podría ser redundante ya que el nombre de la clase es File. Creo que la parte del archivo está implícita. Pero quién sabe por qué hicieron mucho de lo que hicieron con Java.
user489041
117

Utiliza el separador cuando crea una ruta de archivo. Entonces en unix el separador es /. Entonces, si quisieras construir la ruta de Unix /var/temp, lo harías así:

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

Utiliza el pathSeparatorcuando se trata de una lista de archivos como en un classpath. Por ejemplo, si su aplicación tomó una lista de tarros como argumento, la forma estándar de formatear esa lista en Unix es:/path/to/jar1.jar:/path/to/jar2.jar:/path/to/jar3.jar

Entonces, dada una lista de archivos, haría algo como esto:

String listOfFiles = ...
String[] filePaths = listOfFiles.split(File.pathSeparator);
Karthik Ramachandran
fuente
55
Si está creando una ruta * nix como, /var/tempentonces es inútil de usar File.separatorya que ya tiene un código dependiente de la plataforma. También podría codificar el camino.
isapir
109

java.io.FileLa clase contiene cuatro variables de separador estático. Para una mejor comprensión, comprendamos con la ayuda de algún código

  1. separador: carácter separador de nombre predeterminado dependiente de la plataforma como Cadena. Para Windows, es '\' y para Unix es '/'
  2. separatorChar: igual que separator pero es char
  3. pathSeparator: variable dependiente de la plataforma para el separador de ruta. Por ejemplo, PATH o CLASSPATH lista variable de rutas separadas por ':' en sistemas Unix y ';' en el sistema de Windows
  4. pathSeparatorChar: igual que pathSeparator pero es char

Tenga en cuenta que todas estas son variables finales y dependen del sistema.

Aquí está el programa de Java para imprimir estas variables de separación. 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);
    }

}

Salida del programa anterior en el sistema Unix:

File.separator = /
File.separatorChar = /
File.pathSeparator = :
File.pathSeparatorChar = :

Salida del programa en el sistema Windows:

File.separator = \
File.separatorChar = \
File.pathSeparator = ;
File.pathSeparatorChar = ;

Para hacer que nuestra plataforma de programa sea independiente, siempre debemos usar estos separadores para crear la ruta del archivo o leer cualquier variable del sistema como PATH, CLASSPATH.

Aquí está el fragmento de código que muestra cómo usar los separadores correctamente.

//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
fuente
1
Tenga en cuenta que, en Java, el carácter de barra diagonal inversa es \\, ya que una barra diagonal inversa es el carácter de escape para otras abreviaturas de caracteres especiales, por lo que la barra diagonal inversa se usa para escapar. El Stringy chardevuelto por los métodos mencionados anteriormente devuelve la barra invertida con el formato correcto (si está en Windows).
Erik
nuevo archivo ("tmp / abc.txt"); esto es fundamentalmente para Windows y Linux, pero no es fundamentalmente para unix File nuevo ("tmp \\ abc.txt"); esto es un problema solo de Unix
DEV-Jacol