第一次用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 文件中的所有元素节点,并将其值取出来。这种操作是 XML 解析的基础,能够为更复杂的解析工作奠定基础。 在 Java 中,通常使用 DOM4j 库来解析 XML 文件。...
针对这一问题,"遍历XML文件内所有节点和属性"的非递归方法应运而生。 在描述中提到的“比递归调用的速度要快很多”,这通常是指通过迭代而非递归的方式遍历XML文档。递归方法会为每个节点创建新的函数调用栈,而当...
这篇文档"java遍历文件夹解析XML.doc"可能详细介绍了如何使用Java进行这两个任务。 首先,让我们深入了解一下遍历文件夹的概念。在Java中,可以使用`java.io.File`类来操作文件和目录。通过`list()`或`listFiles()`...
本文将深入探讨如何在Java中进行XML文件的导入与导出。 首先,理解XML的基本结构至关重要。XML文件由一系列的元素构成,每个元素都有可能包含子元素或者文本内容。元素通过开始标签 `<tag>` 和结束标签 `</tag>` ...
DOM解析器将整个XML文件加载到内存中,创建一个树形结构,允许我们通过节点遍历和操作XML数据。使用Java的`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`接口可以实现DOM解析。 ```java ...
如果你使用Maven,可以在pom.xml文件中加入以下依赖: ```xml <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind <version>2.13.0 <groupId>...
总结,Java使用DOM4J库解析XML文件涉及到读取文件、获取根元素、遍历元素和属性、提取文本内容、创建和修改XML以及保存XML。DOM4J因其易用性和强大的功能,成为Java开发者处理XML的首选工具之一。在实际项目中,根据...
Java 读取 XML 文件是 Java 开发中常见的一项任务,XML(eXtensible Markup Language)作为一种可扩展标记语言,广泛用于数据交换、配置存储等领域。本教程将深入讲解如何在 Java 中处理 XML 文件,同时涉及 XML 的 ...
Java语言在处理XML文件时,提供了丰富的API和库,使得我们可以轻松地读取、解析、修改和生成XML文档。在给定的场景中,我们主要关注如何使用Java来读取XML文件并根据需求生成新的文件。以下是关于这个主题的详细说明...
在Java编程中,处理XML文件是常见的需求,包括创建XML文件、读取XML文件以及解析XML内容。下面将详细介绍Java如何进行XML文件的操作。 一、Java写XML文件 1. 使用DOM(Document Object Model)API: DOM是W3C推荐...
- **DOM解析:** DOM(Document Object Model)模型将XML文件视为一个树形结构,通过`DocumentBuilder`类加载XML文件,生成`Document`对象,然后可以遍历整个文档节点进行操作。 - **SAX解析:** SAX(Simple API ...
Java 读取 XML 文件的四种方法 在 Java 中读取 XML 文件有多种方法,本文将介绍四种常见的方法,分别使用 DOM、DOM4J、JDOM 和 SAX 解析器。 第一种方法:使用 DOM DOM(Document Object Model)是一种树形结构,...
Java语言在处理XML文件时,通常使用两种主要的方法:DOM(Document Object Model)和SAX(Simple API for XML)。在本场景中,我们主要关注DOM方法,因为标题和描述提到了“在内存中构造一个DOM树”。DOM允许我们将...
Document Object Model(DOM)是一种将XML文档转换为内存中的树形结构的方法,使得可以遍历和修改XML文件。使用Java的`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`接口来实现。以下是一个...
本篇文章将深入探讨如何使用Java来生成XML文件,并结合数据库操作进行数据提取。 首先,我们需要了解XML的基本结构。XML文件由一系列元素组成,每个元素都有开始标签(如`<element>`)和结束标签(如`</element>`)...
针对XML文件的操作,Java提供了多种API,如DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)。本项目中,你创建了一个自定义的Java类,用于实现XML文件的基本操作,包括...
本篇文章将深入探讨如何在Java中读取和写入XML文件,通过具体的例子来帮助理解这一过程。 首先,我们需要引入处理XML文件的Java API,即Java的DOM(Document Object Model)和SAX(Simple API for XML)解析器。DOM...
这个过程中,XML的DOM(Document Object Model)解析器被用来加载和遍历XML文件,XPath则用于高效地定位和提取数据。 在XML设计中,每个图书信息作为一个元素节点,包含多个子节点,如书名、作者等。这样的结构使...