问题描述
最近在品优购项目中开发图片上传服务时,调试过程中毫无问题,但是一旦发布到项目中使用,就崩溃掉,崩溃提示信息:
java.io.FileNotFoundException: D:\Java%20Project\pingyougou-parent\pinyougou-manager-web\target\classes\config\fdfs_client.conf (系统找不到指定的路径。)
由此我们可以看出一些眉目:提示中的路径中出现了一个%20,对比我们的实际路径
发现这个%20可能代表空格,但是系统找路径时并不能自动转化。
对此我们有了思路,应该是每一个地方转化时出错了,我们按照程序一步步深入展开。
我们发现FastDFS文件服务器时需要读取配置文件的路径,采用了this.getClass().getResource(“/”).getPath()的方法来取得存放 class 的物理路径。
经过查阅资料发现:TestURL().class.getResource("").getPath()或TestURL().class.getResource("").getFile()获得的路径,不能被FileReader()和FileWriter()直接应用。原因是URL对空格,特殊字符(%,#,[]等)和中文进行了编码处理。
解决方法
有解决方法(1),使用repaceAll("%20",’ ')替换后,只能解决空格问题。但是路径中包含%和中文就不行了。
有解决方法(2),使用URLDecoder.decode(str,“UTF-8”)解码,但是只能解决一部分,若路径中含有+,也是不能解决的,原因是URL并不是完全用URLEncoder.encode(str,“UTF-8”)编码的,+号被解码后,却变成了空格。
方法(3),可以解决所有的问题,用TestURL().class.getResource("").toURI().getPath(),但是需要处理URISyntaxException异常,比较麻烦点。
这里推荐使用方法3,我们直接添加toURI()方法即可解决。
中…(img-7gJPTEoD-1596074275908)]