我檢討我的代碼如何處理在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
對於編輯2:'Pattern.quote(File.Seperator)'在兩種情況下都能正常工作嗎?在Windows中,它將返回4個引號,並在Unix中與2 - 這是你需要什麼? – kjp
是,Pattern.quote()不工作,這是我做了什麼,但它的一個恥辱,我不得不接受,因爲Windows路徑名的一些特殊的步驟。 –