在寫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的時候內心真的是絕望啊!!!!!!!