java 文件提前结束_dom4j解析xml时报出文件提前结束

在Java Web项目中使用DOM4J解析XML时遇到"文件提前结束"的DocumentException。经过检查XML格式和编码无误后,发现是解析时未关闭流导致的问题。解决方案是在写入XML后添加`writer.write(document)`和`writer.close()`来确保流的正确关闭,从而解决问题。
摘要由CSDN通过智能技术生成

在写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的时候内心真的是绝望啊!!!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值