dom4j解析XML,生产XML,大文件XML

dom4j跟Jdom、sax、dom之间的区别网上很多,一搜一大堆,但是处理大文件的比较少。

所以总结下生成和读取大的XML文件

生成大文件

		public void writeToFile(String filePath,String fileName){	
                                 Document doc = DocumentHelper.createDocument();
		Element rootElement=doc.addElement("root");
		rootElement.addAttribute("name", "root");
		Element testElement = DocumentHelper.createElement("eleTest");
		testElement.addAttribute("name", "testEle");
		testElement.addText("this is another text");
		testElement.setParent(rootElement);
		XMLWriter out = null;
		try{
			out = new XMLWriter(new FileWriter(new File(filePath+File.separator+fileName)));
			out.startDocument();		
			out.writeOpen(rootElement);
			for(int i=0;i<=10000000;i++){
				out.write(testElement);
			}
			out.writeClose(rootElement);
			
		}catch(SAXException e){
			e.printStackTrace();
		}catch(IOException e){
			e.printStackTrace();
		}
		finally{
			if( out!=null ){
				try {
					out.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
}

 

插入10000000条数据,可以生成500多M的文件

 

然后再读取这个文件

				SAXReader reader = new SAXReader();
				reader.setDefaultHandler(new ElementHandler(){
					public void onEnd(ElementPath ep) {
				        Element e = ep.getCurrent(); //获得当前节点   
				        System.out.println(e.getName());
				        e.detach(); //记得从内存中移去 
					}
					public void onStart(ElementPath arg0) {
					}
				});
				doc = reader.read(new BufferedInputStream(new FileInputStream(new File(fileName))));

 

    一般网上的都是用一个实现 ElementHandler的类来做,然后把reader.setDefaultHandler(this)

    我这里是用一个匿名类

    主要的要点就是要每读取一个节点,就需要从内存中把这个节点给移去,要不肯定会报内存不足的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值