在File类中有两个字符串,separator和pathSeparator。

有什么不同?什么时候我应该使用其中一种而不是另一种?


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

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

当你处理一个文件列表时,就像在类路径中一样,你可以使用pathSeparator。例如,如果你的应用程序将一个jar列表作为参数,那么在unix上格式化该列表的标准方法是:/path/to/ jar1.jar:/path/to/jar2.jar:/path/to/jar3.jar

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

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

如果你指的是文件。分隔符和文件。pathSeparator:

文件。pathSeparator用于分隔文件路径列表中的单个文件路径。在windows中,考虑PATH环境变量。你用a;在Windows文件中分离文件路径。pathSeparator将是;。 文件。分隔符是/或\,用于分隔到特定文件的路径。例如,在Windows上,它是\或C:\Documents\Test


file类包含四个静态分隔符变量。为了更好地理解,让我们借助一些代码来理解

separator:平台依赖的默认名称分隔符字符为String。windows是' \ ' unix是' / ' separatorChar:与separator相同,但它是char pathSeparator:路径分隔符的平台因变量。为 example PATH或CLASSPATH变量列表,由':'分隔 Unix系统和Windows系统中的';' pathSeparatorChar:与pathSeparator相同,但它是char

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

下面是打印这些分隔符变量的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 = ;

为了使我们的程序平台独立,我们应该总是使用这些分隔符来创建文件路径或读取任何系统变量,如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");