2015-04-17 163 views
0

如何獲取指定文件/文件夾路徑的文件分隔符?獲取指定文件路徑的file.separator

在Java中,我們可以寫,例如

File f = new File("C:\\MyFolder\\MyText.txt"); 

請記住,這是一個文件表示(該文件不具有實際存在)。因此,給定任何指定的路徑,是否有一種方法可以只返回指定路徑的分隔符?

docs

File.pathSeparatorFile.pathSeparatorChar回報系統相關的文件分隔符,但我要的是一個給定的路徑分隔符,如在上述情況下\,即使上面的程序運行和路徑無效* nix

+0

所有路徑都有分隔符「File.separator」。 – immibis

+0

換句話說,在Linux上,'f'是一個完全有效的路徑,分隔符爲'/',指的是當前目錄下名爲'C:\ MyFolder \ MyTest.txt'的文件。 (在Linux上的文件名允許使用反斜槓) – immibis

+0

我想爲指定的路徑分隔符,而不是操作系統依賴的 – Nederealm

回答

0

File對象的分隔符總是由File.separator(或File.separatorChar)給出。沒有辦法用不尋常的分離器來構造一個物體File;它們總是保持當前系統上有效的路徑。

File f = new File("C:\\MyFolder\\MyText.txt"); 

執行在Windows上線後,fFile對象是指文件MyText.txtMyFolder在驅動器C:,因爲你可能預期。

但在Linux上,f引用File對象,該對象引用當前目錄中的文件C:\MyFolder\MyText.txt。 (在Linux上,文件名允許反斜槓)

想象一下,是否有辦法做到這一點。如果你有一個使用new File("a/b\\c")構建的文件,那麼你怎麼知道它是指文件夾a(分隔符/)中的文件b\c,還是文件夾a/b(分隔符\)中的文件c

它不能,所以應該清楚,沒有可靠的方法來做到這一點。如果你的程序用不尋常的分隔符處理路徑,那麼你的程序需要自己處理它們。 File不能爲你做。

+0

那麼當你爲上面的例子調用mkdirs時會發生什麼?行爲平臺是否依賴? – Nederealm

+0

@Nederealm你在問什麼?它創建指定的目錄,如果它的父目錄尚不存在,則遞歸創建。 – immibis

+0

是否會在文件夾a或文件夾a/b中創建文件夾b \ c,因爲它無法知道c是否是文件? – Nederealm

1

我會從System.getProperty("user.home")開始。而且,你可以使用File.seperator

File f = new File(System.getProperty("user.home") + 
     File.seperator + "MyText.txt"); 

但我寧願像File(String parent, String child)

File f = new File(System.getProperty("user.home"), "MyText.txt"); 
System.out.println(f.getPath());