使用类似下面的方法:
String filePath = Thread.currentThread().getContextClassLoader().getResource(".xml").getPath();
或 this.getClass().getClassLoader().getResource("").getPath();
来获取文件路径时,里面的路径空格会被“%20”代替,这时候如果你用这个获取到的包含“%20”的路径来new一个File时,会出现找不到路径的错误。
此 bug 于 2001年6月被提出来,2002年11月最终关闭。
没有修复的原因是这样做会导致兼容性问题。
官方给出的解决方法是采用URI类再把它解码出来。
于是有以下官方解决方法:
- URI uri = new URI(url.toString());
- FileInputStream fis = new FileInputStream(uri.getPath())
这种方法,需要去捕获异常,参考如下:
private static String fileName;
static {
URI uri;
try {
uri = new URI(XmlUtils.class.getClassLoader().getResource("user.xml").toString());
fileName = uri.getPath();
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
}
但其实,还有一种方法更加方便:
- configPath = java.net.URLDecoder.decode(configPath,"utf-8");
同样可以解决问题。