我尝试使用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文件,它只打印文件名。
为什么会出现这种差异?
答案 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上打开文件,例如。