File.separator或File.pathSeparator

icn*_*bot 493 java file path-separator

File课堂上有两个字符串,separatorpathSeparator.

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

use*_*041 650

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

  • File.pathSeparator用于分隔文件路径列表中的各个文件路径.在Windows上考虑PATH环境变量.您使用a ;来分隔文件路径,以便在Windows File.pathSeparator;.

  • File.separator是任一/\所使用的路径分割到一个特定的文件.例如在Windows上它是\C:\Documents\Test

  • 看起来像`File.separator`应该是`File.fileSeparator`关于`File.pathSeparator` (6认同)
  • @Eddy 我明白你的意思,但它可能是多余的,因为类名是`File`。我认为文件部分是隐含的。但是谁知道为什么他们做了很多他们用 Java 做的事情。 (3认同)

Kar*_*ran 110

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

String path = File.separator + "var"+ File.separator + "temp"
Run Code Online (Sandbox Code Playgroud)

您在pathSeparator处理类路径中的文件列表时使用.例如,如果您的应用程序将jar列表作为参数,则在unix上格式化该列表的标准方法是:/path/to/jar1.jar:/path/to/jar2.jar:/path/to/jar3.jar

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

String listOfFiles = ...
String[] filePaths = listOfFiles.split(File.pathSeparator);
Run Code Online (Sandbox Code Playgroud)

  • 如果您正在构建* nix路径(如`/ var / temp`),则使用`File.separator`是没有用的,因为您已经具有依赖于平台的代码。可能还要对路径进行硬编码。 (3认同)

fox*_*7ot 98

java.io.Fileclass包含四个静态分隔符变量.为了更好地理解,让我们在一些代码的帮助下理解

  1. separator:平台相关的默认名称 - 分隔符字符串.对于Windows,它是'\'而对于unix它是'/'
  2. separatorChar:与分隔符相同,但它是char
  3. pathSeparator:路径分隔符的平台因变量.例如,在Unix系统中用':'分隔的路径的PATH或CLASSPATH变量列表和';' 在Windows系统中
  4. 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);
    }

}
Run Code Online (Sandbox Code Playgroud)

在Unix系统上输出以上程序:

File.separator = /
File.separatorChar = /
File.pathSeparator = :
File.pathSeparatorChar = :
Run Code Online (Sandbox Code Playgroud)

在Windows系统上输出程序:

File.separator = \
File.separatorChar = \
File.pathSeparator = ;
File.pathSeparatorChar = ;
Run Code Online (Sandbox Code Playgroud)

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

  • 注意,在Java中反斜杠字符实际上是\\,因为单个反斜杠是其他特殊字符简写的转义字符,所以反斜杠本身用于转义自身。上述方法返回的“String”和“char”确实返回格式正确的反斜杠(如果在 Windows 上)。 (2认同)