解决java.net.MalformedURLException: unknown protocol问题
?
最近在写一个工具时,java 解析Xml时,出现下面异常:
java.net.MalformedURLException: unknown protocol: e
?at java.net.URL.<init>(Unknown Source)
?at java.net.URL.<init>(Unknown Source)
?at java.net.URL.<init>(Unknown Source)
?at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
?at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
?at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
?at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
?at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
?at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
?at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
?
发现原因是xml文件放置在中文路径下,因为如果是英文路径就没有问题了。
?
在上网找半天也没有发现好的解决方案。在同事点拔下,将中文路径下文件先读取,放在英文路径下,再使用就没有问题。
?
但是对于我的这个程序,我找到好方法:
?
之前代码:
?
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
??DocumentBuilder builder;
??builder = factory.newDocumentBuilder();
??Document document = builder.parse(xmlPath);\\直接将路径名给builder.
?
但是如果路径有中文就会报上面的异常;
?
修改后代码:
?
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
??DocumentBuilder builder;
??builder = factory.newDocumentBuilder();
??
??File file=new File(xmlPath);??//将文件读取,这样路径如果有中文一样可以正常读取
????
??Document document = builder.parse(file); //将file传给DocumentBuilder,
?
没有上面异常可以正常读取。
?
我认为DocumertBuilder这个类对文件的读取可能不够全面吧,所以无法处理读取中文路径下的文件。如果用File先读取,就没有问题。
?
?
?
?
?
?
?
?
?
?
?