getResource函数有中文或空格路径的处理方法

使用类似下面的方法:
String filePath = Thread.currentThread().getContextClassLoader().getResource(".xml").getPath();

或 this.getClass().getClassLoader().getResource("").getPath();

来获取文件路径时,里面的路径空格会被“%20”代替,这时候如果你用这个获取到的包含“%20”的路径来new一个File时,会出现找不到路径的错误。

此 bug 于 2001年6月被提出来,2002年11月最终关闭。
没有修复的原因是这样做会导致兼容性问题。
官方给出的解决方法是采用URI类再把它解码出来。

于是有以下官方解决方法:

Java代码   收藏代码
  1. URI uri = new URI(url.toString());  
  2. 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);
        }

    }


但其实,还有一种方法更加方便:

Java代码   收藏代码
  1. configPath = java.net.URLDecoder.decode(configPath,"utf-8");  


同样可以解决问题。



你可能感兴趣的:(JAVA)