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