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
类包含四个静态分隔符变量。为了更好地理解,让我们借助一些代码来理解
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问题