web-dev-qa-db-fra.com

File.separator ou File.pathSeparator

Dans la classe File, il existe deux chaînes, separator et pathSeparator .

Quelle est la différence? Quand devrais-je utiliser l'un sur l'autre?

456
icnhzabot

Si vous voulez dire File.separator et File.pathSeparator alors:

  • File.pathSeparator est utilisé pour séparer les chemins de fichiers individuels dans une liste de chemins de fichiers. Considérez sous Windows la variable d’environnement PATH. Vous utilisez un ; pour séparer les chemins de fichiers afin que Windows File.pathSeparator soit ;.

  • File.separator est soit / soit \ utilisé pour diviser le chemin d'accès à un fichier spécifique. Par exemple, sous Windows, il s'agit de \ ou C:\Documents\Test

613
user489041

Vous utilisez separator lorsque vous créez un chemin de fichier. Donc, dans unix, le séparateur est /. Donc si vous voulez construire le chemin unix /var/temp vous le feriez comme ceci:

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

Vous utilisez pathSeparator lorsque vous traitez avec une liste de fichiers comme dans un chemin de classe. Par exemple, si votre application utilise une liste de fichiers JAR comme argument, la méthode standard pour formater cette liste sous Unix est la suivante: /path/to/jar1.jar:/path/to/jar2.jar:/path/to/jar3.jar

Donc, étant donné une liste de fichiers, vous feriez quelque chose comme ceci:

String listOfFiles = ...
String[] filePaths = listOfFiles.split(File.pathSeparator);
103

Java.io.File class contient quatre variables de séparateur statique. Pour une meilleure compréhension, comprenons à l'aide d'un code

  1. separator: Caractère séparateur de nom par défaut dépendant de la plate-forme sous forme de chaîne. Pour Windows, c’est "\" et pour Unix, "/".
  2. separatorChar: Identique à separator mais c’est char
  3. pathSeparator: Variable dépendante de la plateforme pour le séparateur de chemin. Par exemple, PATH ou CLASSPATH, liste de variables contenant des chemins séparés par ":" sous Unix et ";" sous Windows
  4. pathSeparatorChar: Identique à pathSeparator mais c'est char

Notez que toutes ces variables sont des variables finales et dépendent du système.

Voici le programme Java pour imprimer ces variables de séparation. 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);
    }

}

Sortie du programme ci-dessus sur le système Unix:

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

Sortie du programme sur le système Windows:

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

Pour rendre notre plate-forme de programme indépendante, nous devrions toujours utiliser ces séparateurs pour créer un chemin de fichier ou lire des variables système telles que PATH, CLASSPATH.

Voici l'extrait de code montrant comment utiliser correctement les séparateurs.

//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");
91
foxt7ot