File.separator或File.pathSeparator
在File
类中有两个string, separator
和pathSeparator
。
有什么不同? 我应该什么时候使用一个?
如果你的意思是File.separator
和File.pathSeparator
那么:
-
File.pathSeparator
用于分隔文件path列表中的单个文件path。 考虑一下windows,PATH环境variables。 你用一个;
在WindowsFile.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。 为了更好的理解,让我们了解一些代码的帮助
- 分隔符:依赖于平台的默认名称分隔符string。 对于Windows而言,它是'\',对于unix则是'/'
- separatorChar:与分隔符相同,但是是char
- pathSeparator:path分隔符的平台相关variables。 例如,在Unix系统中用':'分隔的PATH或CLASSPATHvariables列表和';' 在Windows系统中
- 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");