`

java遍历xml文件

    博客分类:
  • Java
阅读更多

第一次用java遍历一大堆xml文件并检索需要的标签,有点小激动啊,记录一下:

package com.wjl.arrangeDoc;

import java.io.File;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

public class ArrangeDoc {

	/**
	 * 主方法
	 */
	public static void main(String[] args) {
		Long startTime = System.currentTimeMillis();
		String dicPath = "D:\\saveDir\\2015";//告知从哪个文件夹下取文件
		String copyPath = "D:\\temp\\2015";
		arrangeDoc(dicPath,copyPath,"TONGZHISMC","错误文件");
		Long endTime = System.currentTimeMillis();
		Long time = (endTime-startTime)/1000;
		System.out.println("用时:"+time+"秒");
	}
	/**
	 * 该方法用来遍历指定目录下的文件夹并将符合条件的文件复制到指定目录
	 * @param dicPath:遍历该目录下的文件进行查询
	 * @param copyPath:将符合条件的文件夹复制到该文件夹下
	 * @param sign:要查找的标签
	 * @param mistakeName:错误文件文件夹集合
	 * */
	public static void arrangeDoc(String dicPath,String copyPath,String sign,String mistakeName){
		try{
			File root = new File(dicPath);
			File[] files = root.listFiles();//获取当前目录下的所有文件(包括文件夹)
			String fPath = null,dicName="",copyDicPath="";
			File cFile = null;
			File[] childFile=null;
			int flag=0;//0-表示错误文件 1-正常文件
			String[] name=null;
			for(File f:files){
				if(f.isDirectory()){//说明是个文件夹,那么再次遍历下面的文件
					fPath = f.getAbsolutePath();
//					System.out.println(f.getName()+"\n"+fPath);
					cFile = new File(fPath);
					dicName="";
					copyDicPath="";
					childFile = cFile.listFiles();
					if(childFile!=null && childFile.length>0){//说明有文件信息
						for(File cf:childFile){//获取二级目录下的文件
							if(!cf.isDirectory() && cf.getName().trim().equalsIgnoreCase("list.xml")){//非文件夹且是list.xml文件
								name=getSignText(cf,sign);
								if(name!=null && name.length>1){//说明至少有2个数据
									dicName = name[1];
									flag = new Integer(name[0]);
									break;
								}
							}else{
								dicName="list.xml文件不存在";
								flag=0;
							}
						}
						
					}else{
						dicName="空文件夹";
					}
					//根据文件名称新建文件夹
					if(flag==1){copyDicPath = copyPath+java.io.File.separator+dicName;
					}else{copyDicPath = copyPath+java.io.File.separator+mistakeName+java.io.File.separator+dicName;}
//					System.out.println("********************\n"+copyDicPath+"\n********************************");
					//将当前文件夹拷贝到指定目录
					org.apache.commons.io.FileUtils.copyDirectoryToDirectory(f,mkdirDic(copyDicPath));
				}
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	/**
	 * 该方法用来遍历指定的xml文件中的标签
	 * @param xmlFile:要遍历的文件
	 * @param sign:要查找的标签
	 * @return 标签内容
	 * */
	public static String[] getSignText(File xmlFile,String sign){
		String result[] = new String[2];
		result[0]="0";//1-正常文件  0-错误文件
		//1、判断给定的文件是否存在
		if(!xmlFile.exists()){
			result[1]="list.xml文件不存在";
			return result;//直接返回空
		}
		//2、遍历指定的xml文件
		try {
			SAXReader saxReader = new SAXReader();
			Document document = saxReader.read(xmlFile);//读取文件
			Element root = document.getRootElement();//获取根目录
			
			List nodeList = root.selectNodes("//"+sign);
			if(nodeList!=null && nodeList.size()>0){
				if(nodeList.size()>1){//说明有多个标签
					result[1]="list.xml中有多个"+sign+"标签";
					return result;//直接返回空
				}
				Node node  = ((Node)nodeList.get(0));
				String nodeText = node.getText();
				if(nodeText!=null && nodeText.trim().length()>0){
					result[0]="1";
					result[1]=nodeText;
					return result;
				}else{
					result[1]="list.xml的"+sign+"标签中的值为空";
					return result;
				}
			}else{
				result[1]="list.xml中没有"+sign+"标签";
				return result;
			}
		} catch (DocumentException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 该方法用来创建文件夹
	 * @param copyPath:需要创建的目录(该目录用来保存拷贝的文件)
	 * */
	public static File mkdirDic(String copyPath){
		//判断指定目录是否存在
//		System.out.println(copyPath);
		File copyDic = new File(copyPath);
		if(copyDic.isDirectory()){//说明是目录且存在
		}else{//不是目录或不存在
			copyDic.mkdirs();//新建
		}
		return copyDic;
	}
}

 测试了下,400个文件夹(差不多4000个文件)差不多3秒, 三倍之后不知道为什么陡增到19秒了,得考虑考虑优化问题。

分享到:
评论

相关推荐

    java遍历读取xml文件内容

    主要为大家介绍了java遍历读取xml文件内容,感兴趣的小伙伴们可以参考一下

    Java XML文件操作类:Dom4jHelper源文件下载.rar

    Java XML文件操作类:Dom4jHelper源代码文件下载,实现的功能:解析url xml文档,遍历解析文档,遍历解析元素,解析文件,获得根元素,修改xml某节点的值,输出文件路径及文件名 如果输出文件为null,则默认为原xml文件,...

    Java远程读取XML文件相关

    这是一个详细介绍Java怎么样写XML文件和远程读取XML文件的文档,里面有详细的例子。

    Xml 文件处理 java

    自己写的一个XML文件处理,通过DOM4J,实现了逐一遍历整个XML文件,直到找到找到需要修改节点,退出程序,这个代码里面只调试了updatesinglenodevalue这一个函数,其他要用,自己调试,这个工程不需更改就可以使用,...

    两种xml格式的读取方法

    两种xml格式的读取方法,两种xml格式的读取方法

    Java实现用DOM文档和XML文件互换的操作

    该模型定义了THML和XML文件在内存中的逻辑结构,提供了访问、存取THML和XML文件的方法。利用DOM规范,可以实现DOM文档和XML之间的相互转换,遍历、操作相应DOM文档的内容。可以说,要自由的操纵XML文件,就要用到DOM...

    java实现简单解析XML文件功能示例

    主要介绍了java实现简单解析XML文件功能,结合实例形式分析了java针对xml文件的读取、遍历节点及输出等相关操作技巧,需要的朋友可以参考下

    dom4j 解析(读取) xml 节点数据

    此方法解析xml时,不受xml层级的限制。文件中包含了说明文档,java类,以及所使用到的*.jar。并对代码做了注释让你一目了然……

    java生成xml格式文件的方法

    主要介绍了java生成xml格式文件的方法,涉及java节点遍历与属性操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    Dom4j对Java xml文件的操作

    Dom4j对Java xml文件的操作。对节点的增删改查,把字符串读成XML,循环遍历节点!附带所要用的jar包,还有说明!

    XML解析工具

    读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API...这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。

    java解析xml及4种常用解析比较

    然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。 SAX解析器采用了基于事件的...

    读取文件夹中xml文件

    循环遍历文件夹,并且用I/O流读取该文件夹内的xml文件,并且输出到另一个文件夹下

    java实现XML增加元素操作简单示例

    主要介绍了java实现XML增加元素操作,结合简单实例形式分析了java针对xml格式数据的读取、遍历、创建等操作技巧,需要的朋友可以参考下

    PULL解析xml的demo

    通用性强,它会将XML文件的所有内容读取到内存中,然后使用DOM API遍历XML树、检索所需的数据; 优点:简单直观,但需要将文档读取到内存, 缺点:并不太适合移动设备; 2,SAX SAX是一个解析速度快并且占用内存少的...

    xml入门 解析与创建 入门练习

    需要在lib下拷入dom4j包,jdom.jar包。路径需要自己改。四种方式解析创建xml文件,原始的遍历xml,以及一般运用读取,更新xml。

    Java Dom4jHelper.java XML操作类下载.rar

    Java Dom4jHelper.java XML文件操作类下载,可实现解析xml文档,遍历文档,遍历解析元素,获得根元素,修改xml某节点的值,输出文件路径及文件名,将xml转换为字符串,字符串转换为文档等功能。

    Java中四种XML解析技术

    在这篇文章中,我对这四种主流方案做一个不完全评测,仅仅针对遍历 XML 这块来测试,因为遍历 XML 是工作中使用最多的(至少我认为)。 预 备 测试环境: AMD 毒龙1.4G OC 1.5G、256M DDR333、Windows2000 Server SP...

    java源码包---java 源码 大量 实例

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    python实现遍历文件夹修改文件后缀

    用法 python Modifer.py ./ -fp java xml # coding:utf-8 # Build by LandGrey 2016-05-27 import os import sys #批量修改路径与文件名 def Modifyprefix(Path,oldcontent,newcontent): all_file_list = os....

Global site tag (gtag.js) - Google Analytics