最近在写一个工具时,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先读取,就没有问题。