File.separator或File.pathSeparator

File类中有两个string, separatorpathSeparator

有什么不同? 我应该什么时候使用一个?

如果你的意思是File.separatorFile.pathSeparator那么:

  • File.pathSeparator用于分隔文件path列表中的单个文件path。 考虑一下windows,PATH环境variables。 你用一个; 在Windows File.pathSeparator上分隔文件path;

  • File.separator/\ ,用于将path分割成特定的文件。 例如在Windows上,它是\C:\Documents\Test

在构build文件path时使用分隔符。 所以在unix中,分隔符是/ 。 所以,如果你想build立unixpath/var/temp你可以这样做:

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

在处理类path中的文件列表时使用pathSeparator 。 例如,如果您的应用程序将一个jar列表作为参数,那么在unix上设置该列表的标准方式是: /path/to/jar1.jar:/path/to/jar2.jar:/path/to/jar3.jar : /path/to/jar1.jar:/path/to/jar2.jar:/path/to/jar3.jar : /path/to/jar1.jar:/path/to/jar2.jar:/path/to/jar3.jar

所以给定一个文件列表,你会做这样的事情:

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

java.io.File类包含四个静态分隔符variables。 为了更好的理解,让我们了解一些代码的帮助

  1. 分隔符:依赖于平台的默认名称分隔符string。 对于Windows而言,它是'\',对于unix则是'/'
  2. separatorChar:与分隔符相同,但是是char
  3. pathSeparator:path分隔符的平台相关variables。 例如,在Unix系统中用':'分隔的PATH或CLASSPATHvariables列表和';' 在Windows系统中
  4. pathSeparatorChar:与pathSeparator相同,但是是char

请注意,所有这些都是最终variables和系统相关的。

这里是打印这些分隔符variables的java程序。 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); } } 

Unix系统上面程序的输出:

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

Windows系统上程序的输出:

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

为了使我们的程序平台独立,我们应该始终使用这些分隔符来创build文件path或读取任何系统variables,如PATH,CLASSPATH。

以下是显示如何正确使用分隔符的代码片段。

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