2011-11-23 29 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。