在写javaweb小项目的时候,用dom4j解析xml报出如下错误:
org.dom4j.DocumentException:Error ....... Nested exception: 文件提前结束。
1 packagecom.miragic.utils;2
3 importjava.io.FileNotFoundException;4 importjava.io.FileOutputStream;5
6 importjava.io.UnsupportedEncodingException;7
8 importorg.dom4j.Document;9 importorg.dom4j.DocumentException;10 importorg.dom4j.io.OutputFormat;11 importorg.dom4j.io.SAXReader;12 importorg.dom4j.io.XMLWriter;13
14 //操作XML文件的方法
15 public classJaxpUtils {16
17 staticString path;18
19 static{20 path=JaxpUtils.class.getClassLoader().getResource("users.xml").getPath();21
22 }23 public staticDocument getDocument() {24 //创建一个dom4j解析器
25 try{26 SAXReader reader=newSAXReader();27 Document document=reader.read(path);28 returndocument;29 } catch(DocumentException e) {30 //TODO Auto-generated catch block
31 e.printStackTrace();32 }33 return null;34 }35
36 public static voidwrite2xml(Document document) {37
38 try{39 XMLWriter writer=new XMLWriter(newFileOutputStream(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没有关流
解决方法:
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的时候内心真的是绝望啊!!!!!!!