File.separator o File.pathSeparator

Nella class File ci sono due stringhe, separator e pathSeparator .

Qual è la differenza? Quando dovrei usarne uno sull’altro?

Se intendi File.separator e File.pathSeparator allora:

  • File.pathSeparator viene utilizzato per separare i singoli percorsi di file in un elenco di percorsi di file. Considerare su Windows, la variabile di ambiente PATH. Tu usi un ; per separare i percorsi dei file così su Windows File.pathSeparator sarebbe ; .

  • File.separator è / o \ utilizzato per suddividere il percorso di un file specifico. Ad esempio su Windows è \ o C:\Documents\Test

Si utilizza il separatore quando si crea un percorso di file. Quindi in Unix il separatore è / . Quindi se volessi build il percorso unix /var/temp lo faresti in questo modo:

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

Si utilizza pathSeparator quando si ha a che fare con un elenco di file come in un classpath. Ad esempio, se l’app ha preso un elenco di jar come argomento, il metodo standard per formattare l’elenco su unix è: /path/to/jar1.jar:/path/to/jar2.jar:/path/to/jar3.jar

Quindi, dato un elenco di file, dovresti fare qualcosa del genere:

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

java.io.File class java.io.File contiene quattro variabili di separazione statiche. Per una migliore comprensione, capiamo con l’aiuto di alcuni codici

  1. separator: carattere nome-separatore predefinito dipendente dalla piattaforma come String. Per Windows, è “\” e per Unix è “/”
  2. separatorChar: come separatore ma è char
  3. pathSeparator: variabile dipendente dalla piattaforma per path-separator. Per esempio PATH o CLASSPATH elenco di percorsi variabili separati da ‘:’ in sistemi Unix e ‘;’ nel sistema di Windows
  4. pathSeparatorChar: come pathSeparator ma è char

Si noti che tutti questi sono variabili finali e dipendenti dal sistema.

Ecco il programma java per stampare queste variabili separatrici. 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); } } 

Output del programma sopra sul sistema Unix:

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

Uscita del programma su sistema Windows:

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

Per rendere la nostra piattaforma di programma indipendente, dovremmo sempre usare questi separatori per creare il percorso del file o leggere qualsiasi variabile di sistema come PATH, CLASSPATH.

Ecco lo snippet di codice che mostra come utilizzare correttamente i separatori.

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