filePath.getFileName()的行为有所不同

时间:2013-10-01 10:16:33

标签: java java-7

我尝试使用Path接口;

//get a path object with relative path
Path filePath = Paths.get("C:\\Test\\filename.txt");
System.out.println("The file name is: " + filePath.getFileName());
Path filePath2 = Paths.get("/home/shibu/Desktop/filename.txt");
System.out.println("The file name is: " + filePath2.getFileName());

输出就像是;

The file name is: C:\Test\filename.txt
The file name is: filename.txt

对于windows文件,它打印完整路径,对于linux文件,它只打印文件名。

为什么会出现这种差异?

1 个答案:

答案 0 :(得分:3)

简单:在Linux上,文件名中唯一的非法字符是/和0字节。其他所有内容(包括\,换行符和转义序列)均有效。

这意味着C:\Test\filename.txt是Linux上的有效文件名。 Java运行时不会尝试智能,并猜测这可能是Windows路径。

请注意,使用/时会有所不同:使用Java时,这是Windows上的有效路径分隔符。因此路径a/foo.txt是Linux Windows上的相对路径。

这意味着您可以使用Paths.get("/C:/Test/filename.txt");在Windows上打开文件,例如。