现在的位置: 首页 > 综合 > 正文

java.net.MalformedURLException: unknown protocol: e

2014年08月29日 ⁄ 综合 ⁄ 共 1455字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.