在写javaweb小项目的时候,用dom4j解析xml报出如下错误:
org.dom4j.DocumentException:Error ....... Nested exception: 文件提前结束。
1 package com.miragic.utils; 2 3 import java.io.FileNotFoundException; 4 import java.io.FileOutputStream; 5 6 import java.io.UnsupportedEncodingException; 7 8 import org.dom4j.Document; 9 import org.dom4j.DocumentException; 10 import org.dom4j.io.OutputFormat; 11 import org.dom4j.io.SAXReader; 12 import org.dom4j.io.XMLWriter; 13 14 //操作XML文件的方法 15 public class JaxpUtils { 16 17 static String path; 18 19 static { 20 path=JaxpUtils.class.getClassLoader().getResource("users.xml").getPath(); 21 22 } 23 public static Document getDocument() { 24 //创建一个dom4j解析器 25 try { 26 SAXReader reader=new SAXReader(); 27 Document document=reader.read(path); 28 return document; 29 } catch (DocumentException e) { 30 // TODO Auto-generated catch block 31 e.printStackTrace(); 32 } 33 return null; 34 } 35 36 public static void write2xml(Document document) { 37 38 try { 39 XMLWriter writer=new XMLWriter(new FileOutputStream(path),OutputFormat.createPrettyPrint()); 40 41 } catch (UnsupportedEncodingException e) { 42 // TODO Auto-generated catch block 43 e.printStackTrace(); 44 } catch (FileNotFoundException e) { 45 // TODO Auto-generated catch block 46 e.printStackTrace(); 47 } 48 49 } 50 51 }
百度了好久,有的说是xml没有根目录,有的说是xml格式不对,然后我检查了xml格式并且重写了好几次,但都木有用,以下为xml代码:
<?xml version="1.0" encoding="UTF-8"?> <users> <user username="miragic" password="000000" email="469548329@qq.com" birthday="1997-2-1" ></user> </users>
同时,还排除了一下编码的错误,并没有发现异常.
错误原因:解析xml没有关流
解决方法:
package com.miragic.utils; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; //操作XML文件的方法 public class JaxpUtils { static String path; static { path=JaxpUtils.class.getClassLoader().getResource("users.xml").getPath(); } //private static Document document; public static Document getDocument() { //创建一个dom4j解析器 try { SAXReader reader=new SAXReader(); Document document=reader.read(path); return document; } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public static void write2xml(Document document) { try { XMLWriter writer=new XMLWriter(new FileOutputStream(path),OutputFormat.createPrettyPrint()); writer.write(document) ; writer.close() ; } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch(IOException e) { e.printStackTrace(); } } }
加了两行
writer.write(document);
writer.close();
问题解决.
总结:一个简单的小错误,说白了还是理解的不够透彻导致写代码的时候丢三落四,好歹问题解决了,找bug的时候内心真的是绝望啊!!!!!!!