Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 何时应使用File.separator和何时使用File.pathSeparator?_Java_File_Path Separator - Fatal编程技术网

Java 何时应使用File.separator和何时使用File.pathSeparator?

Java 何时应使用File.separator和何时使用File.pathSeparator?,java,file,path-separator,Java,File,Path Separator,在文件类中有两个字符串,和 有什么区别?什么时候我应该使用一个而不是另一个?在构建文件路径时使用分隔符。因此在unix中,分隔符是/。因此,如果您想构建unix路径/var/temp,您可以这样做: String path = File.separator + "var"+ File.separator + "temp" String listOfFiles = ... String[] filePaths = listOfFiles.split(File.pathSeparator); 处

文件
类中有两个字符串,和


有什么区别?什么时候我应该使用一个而不是另一个?

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

String path = File.separator + "var"+ File.separator + "temp"
String listOfFiles = ...
String[] filePaths = listOfFiles.split(File.pathSeparator);
处理类路径中的文件列表时,可以使用
路径分隔符。例如,如果您的应用程序将jar列表作为参数,那么在unix上格式化该列表的标准方法是:
/path/to/jar1.jar:/path/to/jar2.jar:/path/to/jar3.jar

因此,给定一个文件列表,您可以执行以下操作:

String path = File.separator + "var"+ File.separator + "temp"
String listOfFiles = ...
String[] filePaths = listOfFiles.split(File.pathSeparator);

如果您的意思是
File.separator
File.pathSeparator
,那么:

  • File.pathSeparator
    用于分隔文件路径列表中的各个文件路径。考虑Windows环境下的路径环境变量。您使用
    来分隔文件路径,因此在Windows上
    file.pathseposider
    将是

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


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

  • 分隔符:与平台相关的默认名称分隔符字符作为字符串。对于windows,它是“\”,对于unix,它是“/”
  • separatorChar:与separator相同,但它是char
  • pathSeparator:路径分隔符的平台相关变量。对于 示例路径或类路径变量列表中以“:”分隔的路径 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");
    

    命名有点混乱,像这样的东西需要的速度实在太快了(参见Perl)。请看和的示例。或者使用简单的助记符:pathSeparator将路径分隔开。花一分钟将它们打印到屏幕上就可以回答您的问题……虽然我大体上同意,简单地在他的系统上打印它们不会显示其他操作系统的变体。如果您正在构建一个*nix路径,如
    /var/temp
    ,那么使用
    文件.separator
    是没有用的,因为您已经有了依赖于平台的代码。还不如对路径进行硬编码。看起来像是
    File.separator
    应该是
    File.fileSeparator
    关于
    File.pathSeparator
    @Eddy我明白你的意思,但它可能是多余的,因为类名是
    File
    。我认为文件部分是隐含的。但是谁知道他们为什么要对Java做这么多。请注意,在Java中,反斜杠字符实际上是\\,因为一个反斜杠是其他特殊字符速记的转义字符,所以反斜杠本身用于转义。上述方法返回的
    字符串
    字符
    确实返回格式正确的反斜杠(如果在Windows上)。新文件(“tmp/abc.txt”);这适用于windows和linux,但不适用于unix新文件(“tmp\\abc.txt”);这是唯一的unix问题