⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filecombine.java

📁 xml文件合并文件合并文件合并文件合并文件合并文件合并
💻 JAVA
字号:
/*
 * Created on 2009-1-5
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package filesplit.src;

import java.io.*;
import java.util.*;


import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;
import org.jdom.xpath.*;
//import org.saxpath.SAXPathException;

/**
 * @author zhuwenhai
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class FileCombine {
	
	String logFile;
	String sourceDir;
	String errorDir;
	ArrayList al = new ArrayList();
	
	public static void main(String args[])
	{
		FileCombine fc =new FileCombine();
		//fc.sourceDir = args[0];
		fc.combine();
	}
	public void combine()
	{
		try {
			init("filecombine.xml");
			PrintStream  log = new PrintStream(new FileOutputStream(new File(logFile), true), true, "GBK");
			System.setOut(log);
			System.setErr(log);
			
		} catch (JDOMException e1) {
			
			e1.printStackTrace();
		} catch (IOException e1) {
			
			e1.printStackTrace();
		}
		
		String targetDir;
		String prefix;
		String patentXpath;
		String childXpath;
		String idXpath;
		
		String suffix="ok_.xml";
		String r_pre="";
		String r_dir="";
		//long   r_time=0;
		
		for (int k=0; k<al.size(); k++)
		{
			targetDir = (String)((Hashtable)al.get(k)).get("targetDir");
			prefix = (String)((Hashtable)al.get(k)).get("prefix");
			patentXpath = (String)((Hashtable)al.get(k)).get("patentXpath");
			childXpath = (String)((Hashtable)al.get(k)).get("childXpath");
			idXpath = (String)((Hashtable)al.get(k)).get("idXpath");
			
			Document doc = null;
			Element root = null;
			Element tline = null;
			SAXBuilder sb = new SAXBuilder();
			try 
			{
				MyFileFilter filterOver = new MyFileFilter(prefix, suffix);
				//File ff = new File("d:\\tmp\\");
				File ffOver = new File(sourceDir);
				File[] flOver = ffOver.listFiles(filterOver);
				
				if(flOver.length == 0)
				{
					continue;
				}
				for(int m=0; m<flOver.length; m++)
				{
					r_pre = flOver[m].getName().substring(0, flOver[m].getName().indexOf('-'));
				
					//r_time=(new Date()).getTime();
				
					System.out.println();
					System.out.println((new Date(System.currentTimeMillis())) + " start combine " + r_pre + "'s files: ");
	
					MyFileFilter filter = new MyFileFilter(r_pre, ".xml", suffix);
					//File ff = new File("d:\\tmp\\");
					File ff1 = new File(sourceDir);
					File[] fl1 = ff1.listFiles(filter);
					
					r_dir = sourceDir+"/"+ r_pre;
				  	new File(r_dir).mkdir();
					
					for(int i=0; i<fl1.length; i++)
					{
						fl1[i].renameTo(new File(r_dir+"/"+fl1[i].getName()));
					}
					flOver[m].renameTo(new File(r_dir+"/"+flOver[m].getName()));
					
					File ff = new File(r_dir);
					File[] fl = ff.listFiles(filter);
					
					for(int i=0; i<fl.length ; i++)
					{
						try
						{
							if(i==0)
							{
								doc = sb.build(fl[0]);
								//XPath.setXPathClass(org.jdom.xpath.JaxenXPath);
								XPath xp = XPath.newInstance(patentXpath); //"/Message/COMMAND/InpaymentStatementRequest/InpaymentStatement"
								tline = (Element)xp.selectSingleNode(doc);
								
								System.out.println("  -> combine file " + fl[i].getName() + "success");
							}
							else
							{
								Document tmpdoc = sb.build(fl[i]);   
								XPath xp = XPath.newInstance(childXpath); //"/Message/COMMAND/InpaymentStatementRequest/InpaymentStatement/InpaymentLine");
								List lines = xp.selectNodes(tmpdoc);
								//List lines = tmproot.getChild("COMMAND").getChild("InpaymentStatementRequest").getChild("InpaymentStatement").getChildren("InpaymentLine");
								int cnt = lines.size();
								for(int j=0; j<cnt; j++)
								{
									Element el = (Element)lines.get(j);
									el.detach();
									tline.addContent(el);
								}
								
								System.out.println("  -> combine file:" + fl[i].getName() + " record number:"+cnt+ " success");
							}
						} catch (JDOMException e) {
							System.out.println(e.getMessage());
							System.out.println("  file:"+fl[i].getName()+" deal failed!");
							e.printStackTrace();
						}					
					}
					
					XMLOutputter XMLOut = new XMLOutputter();
					Format format = XMLOut.getFormat();
					format.setEncoding("GBK");
					FileWriter fw = new FileWriter(r_dir+"/"+r_pre+".xml");
					XMLOut.output(doc, fw);
					fw.close();
					
					System.out.println((new Date(System.currentTimeMillis()))+" end combine " + r_pre + " files.");
					
					File mv = new File(r_dir+"/"+r_pre+".xml");
					boolean b = mv.renameTo(new File(targetDir + "/"+r_pre+".xml"));
					if(b==false)
					{
						System.out.println("mv file "+r_dir+"/"+r_pre+".xml"+ " failed!");
					}
				}
			}
			catch (IOException e) {
				System.out.println(e.getMessage());
				e.printStackTrace();
			}
		}
		
	}
	
    private void init(String configFile)
    throws JDOMException, IOException
	{
	    SAXBuilder b = new SAXBuilder();
	    Document doc = b.build(new File(configFile));
	    Element el = doc.getRootElement();
	    
	    logFile = el.getAttribute("logFile").getValue().trim();
	    sourceDir = el.getAttribute("sourceDir").getValue().trim();
	    errorDir = el.getAttribute("errorDir").getValue().trim();
	    
	    List list = el.getChildren("combine_section");
	    Iterator it = list.iterator();
	    while(it.hasNext())
	    { 
	    	Hashtable ht = new Hashtable();
	    	Element e = (Element)it.next();
	    	ht.put("targetDir", e.getChildTextTrim("targetDir"));
	    	ht.put("prefix", e.getChildTextTrim("prefix"));
	    	ht.put("patentXpath", e.getChildTextTrim("patentXpath"));
	    	ht.put("childXpath", e.getChildTextTrim("childXpath"));
	    	ht.put("idXpath", e.getChildTextTrim("idXpath"));
	    	al.add(ht);
	    }
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -