2013-10-01 54 views
0

我試過使用Path接口;filePath.getFileName()行爲不同

//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

你是在Windows上還是在Linux上運行所有四行,還是運行了Win上的前兩個和Linux上的後兩個? –

+0

所有行都在Linux – Aneesh

回答

3

簡單:在Linux上,文件名中唯一的非法字符是/和0字節。其他所有內容,包括\,換行符和換碼序列都是有效的。

這意味着C:\Test\filename.txt是Linux上的有效文件名。 Java運行時不會嘗試變得聰明,並猜測這可能是Windows路徑。

請注意,當您使用/時,情況會有所不同:使用Java時,這是Windows上的有效路徑分隔符。所以路徑a/foo.txt是Linux上的 Windows的相對路徑。例如,

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

+0

感謝您的答案。如果我們在Windows中使用諸如「/C:/Test/filename.txt」之類的路徑,正常文件操作會拋出錯誤。 – Aneesh

+0

我一直在使用該模式超過10年。 「正常文件操作」是什麼意思,你會得到哪個錯誤? –

+0

File file = new File(/C:/Test/filename.txt); ,FileNotFoundException, 由於文件分隔符在Windows中是「\」。 – Aneesh