当前位置: 首页 > news >正文

Java解析xml配置文件合成器

这里是我自己写的一个简单的文件合成器,把n多文件路径配置在xml中,Java解析后读出来写到第一个文件中去。

xml配置文件如下:

 

path.xml

<?xml version="1.0" encoding="gbk"?>
<files>
 <file path="d:\\123.txt"></file>
 <file path="d:\\124.txt"></file>
 <file path="d:\\125.txt"></file>
</files>

 

解析的Java代码如下:

 ReadAll.java

package javaIOTest;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;

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

public class ReadAll {

 private ReadAll(String xmlFile) {
  dispose(xmlFile);
 }

 public HashMap<String, String> iterateWholeXML(String filename) {
  SAXReader saxReader = new SAXReader();
  HashMap<String, String> hm = new HashMap<String, String>();
  try {
   Document document = saxReader.read(new File(filename));
   Element root = document.getRootElement();
   int num = -1;
   System.out.println("开始解析......");
   for (Iterator iter = root.elementIterator(); iter.hasNext();) {
    Element element = (Element) iter.next();
    num++;
    Attribute pathAttr = element.attribute("path");
    if (pathAttr != null) {
     String path = pathAttr.getValue();
     if (path != null && !path.equals("")) {
      hm.put(pathAttr.getName() + num, path);
     } else {
      hm.put(pathAttr.getName() + num, "\\123");
     }
    }
   }
 
   return hm;
  } catch (DocumentException e) {
   e.printStackTrace();
  }
  return hm;
 }

 private void dispose(String xmlFile) {
  readFile(iterateWholeXML(xmlFile));
 }

 public void readFile(HashMap<String, String> fileMap) {
  FileReader fr = null;
  FileWriter fw = null;
  BufferedWriter bw = null;
  BufferedReader br = null;
  String str=null;
  try {
      
            File file0 = null;
            StringBuffer sb = new StringBuffer();
            System.out.println("开始读取......");
   for (String ss : fileMap.keySet()) {
    
    System.out.println("正在合并......"); 
    System.out.println(ss + ":" + fileMap.get(ss));   
   if("path0".equals(ss)){
    file0 = new File(fileMap.get(ss));
    continue;
   }
           
            File file = new File(fileMap.get(ss));
   fr = new FileReader(file);
   br = new BufferedReader(fr);
   do{
      str = br.readLine();
   sb.append(str);
   sb.append("\n");
   }while(br.readLine()==null);
   sb.append("\n");
   }
   fw = new FileWriter(file0, true);
   bw = new BufferedWriter(fw);
   bw.write(sb.toString());
   bw.flush();
   
   
   System.out.println("合并结束......");

  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   try {
    fr.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
   try {
    fw.close();
   } catch (IOException e) {
    e.printStackTrace();
   }

  }
 }

 public static void main(String[] args) {
  new ReadAll("d:\\path.xml");
 }

}

 

 

在执行的时候确保你的配置文件的路径和main方法中的路径一致。

转载于:https://www.cnblogs.com/alaricblog/p/3278564.html

相关文章:

  • HTTP 状态代码及其定义
  • VS2008快捷键大全
  • 新浪微博API
  • STM32菜鸟成长记录---RS485通讯协议的应用
  • 可滚动和可更新的结果集
  • c++ builder TreeView控件节点遍历
  • 最近看的几部动漫
  • DataGrid的实现超链接的方法小结
  • cocos2d-x学习笔记------动画人物跑起来吧!
  • bump mapping -- per-fragment lighting computation (Phong shading)
  • 第二课 寄存器
  • eclipse常见小问题
  • 自由存储区内存的分配与释放
  • Java程序设计10——与运行环境交互
  • hdu 1520(简单树形dp)
  • 《剑指offer》分解让复杂问题更简单
  • Date型的使用
  • HTTP--网络协议分层,http历史(二)
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • mysql_config not found
  • MySQL数据库运维之数据恢复
  • Python打包系统简单入门
  • text-decoration与color属性
  • 从PHP迁移至Golang - 基础篇
  • 从零搭建Koa2 Server
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 反思总结然后整装待发
  • - 概述 - 《设计模式(极简c++版)》
  • 判断客户端类型,Android,iOS,PC
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 我有几个粽子,和一个故事
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #pragma data_seg 共享数据区(转)
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (11)MATLAB PCA+SVM 人脸识别
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (九)信息融合方式简介
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转)Scala的“=”符号简介
  • (转)可以带来幸福的一本书
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .net core 6 redis操作类
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .Net小白的大学四年,内含面经
  • @Bean, @Component, @Configuration简析
  • @KafkaListener注解详解(一)| 常用参数详解
  • [ASP.NET MVC]Ajax与CustomErrors的尴尬