2011-11-23 31 views
2

我剛剛遇到了一個有趣的bug。我試圖使用user.home保存路徑;事情是在Win XP的中的user.home開始與xml - StreamResult - 在空格處走動問題

X:\ Documents和Settings \

...一定的空間取代他們的位置。唯一的例外說

java.io.FileNotFoundException:C:\文件%20於是%20Settings ...

...所以,我所看到的,所有空格都被替換爲 '%' ;我想這是一個編碼問題,但我不太確定。錯誤「5077403」頁面不提供任何解決方法;但我希望應該有一些?

回答

0

一個黑客(應該在大多數的Win XP系統的工作)是用這樣的:

String homeDir = System.getProperty("user.home"); 
homeDir = homeDir.replace("Documents and Settings", "DOCUME~1"); 

這將使homeDir不變,如果代碼恰好是在Windows 7上或在非Windows上運行環境。

+0

這是一個非常有趣的方式謝謝。但是,如果user.home可能包含一些不可預知的空間呢?我的意思是X:\ Documents and Settings \ xxx xx xx \ xx xx x etc?如何以更靈活的方式來演繹它? – user592704

+0

@ user592704 - 黑客可以擴展爲爲路徑上的每個目錄使用DOS(所謂的8.3格式)名稱。這並不簡單,但藉助名爲[NativeCall](http://johannburkard.de/software/nativecall/)的軟件包和一些Windows API調用的幫助,可以非常容易地完成,如[此處]所述(http: //dolf.trieschnigg.nl/eightpointthree/eightpointthree.html)。 –

+0

那麼,我不會稱之爲「黑客」,而是一個有用的適應:)謝謝;但是編碼呢?我沒有嘗試,但可以編碼轉換幫助?你有關於它的任何提示嗎? – user592704

0

這個錯誤最簡單也是最正確的修復/解決方法是使用解碼來替換結果系統ID。

streamResult.setSystemId(java.net.URLDecoder.decode(streamResult.getSystemId(), "UTF-8")); 

這將解碼系統ID並用空格替換%20。