2012-11-11 170 views
4

我想要一個表示路徑的字符串並將其轉換爲絕對的Unix樣式路徑。此字符串可以是Windows或Unix樣式,因爲它是調用MainClass.class.getClassLoader().getResource("").getPath()的結果,它根據您的系統返回不同的樣式路徑。 (我正在爲我正在寫的遊戲做這個,其中一部分給了用戶一個簡單的「bash-ish」shell,我希望用戶能夠讀取文件。假的文件系統是作爲正常的目錄樹存儲在我的項目的子目錄中,這個文件系統將使用Unix風格的路徑,我希望能夠將輸入的路徑與前面提到的字符串連接起來(通過一些小的編輯將它們放到正確的目錄中)所以我可以找到文件的內容。)將Windows風格的路徑轉換爲Unix路徑

任何想法我可能會這樣做?我嘗試了很多東西,但似乎無法讓它在朋友的Windows 7系統上正常工作。

目前我只是用一個簡單的東西來檢查字符串是以「C:\」開頭還是類似的東西,然後用斜線代替反斜槓,但是沒有辦法可以成爲一種好方法去做這件事,我相信其他人以前也遇到過不同路徑的問題。這當然是一個非常臨時的解決方案。

+0

我會建議顯示一些代碼,你試圖實現什麼,以及你現在擁有什麼。 – jtahlborn

+0

這個問題對我來說似乎沒有代碼就足夠合理。 – subie

+0

完美合理的問題。 org.apache.commons.io.FilenameUtils.normalize(name,true)將執行所需的操作。這是一個完全合理的事情,而不是解釋爲什麼用戶不應該,爲什麼不發佈答案? – Rich

回答

0

如果你想要做的是能有一個相對名稱訪問一個文件到某個目錄,你可以只使用純File API,像這樣:

final String baseDir = MainClass.class.getClassLoader().getResource("").getPath(); 
final String relativeName = "audio/abc.mp3"; 
final File relativeFile = new File(baseDir, relativeName); 
final String canonicalPath = relativeFile.getCanonicalPath(); 

應該在Unix工作和Windows,因爲Windows接受Unix和Windows風格的路徑(只是從我自己的經驗中說)。

13

一般來說,我從來沒有在使用'/'作爲分隔符的任何操作系統上遇到問題。

new File("https://stackoverflow.com/a/b/c.txt"); 

工作至少在UNIX,Windows和iSeries。

如果你想正確的話,有一個常量'File.separator',它包含操作系統分隔符。

如果要替換字符串中的反斜槓「\」,記住,這是一個特殊的轉義字符:

String newString = str.replace("\\","/"); 

編輯:

記住,字符串是不可改變的。

str.replace("\\","/"); 

不會改變字符串,只返回一個新字符串替換字符。

+1

提示:使用'.replace()'的'char'版本會稍微高效:) – Qix