2012-06-28 16 views
2

我檢討我的代碼如何處理在Windows和UNIX不同的文件分割符在java中

我的Java應用程序在Windows和Unix使用Java 6和操作文件運行。我知道我可以使用File.separator獲取文件系統中的獨立的方式文件分隔符,但如果我直接使用指定Windows文件分隔符字符,因爲是「\」,這也是Java的轉義字符我不能做的操作文件路徑。所以在我的代碼,我總是通過「與‘/’替換\存儲在UNIX符號文件路徑,這些路徑都存儲在數據庫中,所以我覺得有一個問題逃脫有作爲。所以,我是這樣的誤解,試圖用文件分割符也將失敗,因爲它會返回「\」,而不是「\」,但現在認識到只需要\如果我真的顯式地指定它自己的報價。

現在,我想這是所有不必要的,只要我總是用文件分割符,我不需要做這種轉換,是嗎?

編輯: 發現它似乎是一個問題的情況下

"C:\Fred\test1.txt".split("\\\\"); 
"C:\Fred\test1.txt".split(System.getProperty("file.separator")); 

如果我想分裂的\字符串我有,因爲\在正則表達式特殊意義加倍了,所以線使用文件分割符失敗

java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 
\ 
^ 
    at java.util.regex.Pattern.error(Pattern.java:1713) 
    at java.util.regex.Pattern.compile(Pattern.java:1466) 
    at java.util.regex.Pattern.<init>(Pattern.java:1133) 
    at java.util.regex.Pattern.compile(Pattern.java:823) 

但在UNIX上沒有這樣的要求對應的「/」不應該被轉義

編輯2: 這個問題已經Splitting filenames using system file separator symbol之前被要求解決方案可以歸結爲使用Pattern.quote()圍繞輸入或試圖使用文件的方法,而正則表達式。這兩種方法都有一些不足之處,我希望它能夠以獨立於系統的方式查看文件,但我並不是說Java 7中的Path具有相同的問題。

編輯3: 還看到有閱讀問題/從數據庫寫入,創建一個單獨的問題上Storing Windows Path in Database and retrieving with Hibernate using java

+0

對於編輯2:'Pattern.quote(File.Seperator)'在兩種情況下都能正常工作嗎?在Windows中,它將返回4個引號,並在Unix中與2 - 這是你需要什麼? – kjp

+0

是,Pattern.quote()不工作,這是我做了什麼,但它的一個恥辱,我不得不接受,因爲Windows路徑名的一些特殊的步驟。 –

回答

4

是的,你是正確的 - 如果你使用File.Seperator你不需要任何額外的,因爲在逃逸Windows已經爲你逃脫了。來自java documentation

separatorChar 

public static final char separatorChar 

The system-dependent default name-separator character. 
This field is initialized to contain the first character of the value of the system property file.separator. 
On UNIX systems the value of this field is '/'; 
on Microsoft Windows systems it is '\\'. 
+0

使用正則表達式時增加了問題 –

相關問題