import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.dom4j.Attribute;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.ElementHandler;
import org.dom4j.ElementPath;
import org.dom4j.io.SAXReader;
import com.zzb3.exp.FileIsNotFindException;
/**
* Dom4J 处理大数据并将其导出到另外一个文件的写法
* @author 消魂钉
*
*/
public class BigDataElementHandler implements ElementHandler {
private String inputFilePath;
private String outputFilePath;
private String[] filedNames;
private String delimiter = "";
private String BZF = "【123】";
private SAXReader reader;
public BigDataElementHandler(String inputFilePath,String outputFilePath,String[] filedNames,String delimiter) throws FileIsNotFindException {
if (StringUtils.isBlank(inputFilePath))
throw new FileIsNotFindException("錯誤:要转化的XML路径不能为空!");
if (StringUtils.isBlank(outputFilePath))
throw new FileIsNotFindException("錯誤:转化后的路径不能为空");
if (ArrayUtils.isEmpty(filedNames))
throw new FileIsNotFindException("錯誤:字段不能为空");
if (StringUtils.isBlank(delimiter))
throw new FileIsNotFindException("錯誤:分隔标识符不能为空");
File file = new File(outputFilePath);
if (file.exists())file.delete();
this.inputFilePath = inputFilePath;
this.outputFilePath= outputFilePath;
this.filedNames = filedNames;
this.delimiter = delimiter;
try {
File files = new File(this.inputFilePath);
if (!files.exists()) {
throw new FileIsNotFindException("錯誤:要转化的文件不存在");
}
reader = new SAXReader();
reader.setDefaultHandler(this);
reader.read(files);
} catch (DocumentException e) {
e.printStackTrace();
}
}
@Override
public void onEnd(ElementPath arg0) {
}
@Override
public void onStart(ElementPath arg0) {
Element e = arg0.getCurrent();
if("row".equals(e.getName())){
try {
StringBuffer sb = new StringBuffer("");
for (String attrName : filedNames) {
Attribute attribute = e.attribute(attrName);
String temp = "";
if (attribute!=null) {
temp = this.viText(attribute.getStringValue());
}
sb.append(temp+delimiter);
}
if (sb.length()!=0) {
sb.deleteCharAt(sb.length()-1);
}
FileUtils.writeStringToFile(new File(outputFilePath),sb.toString()+"\n",true);
} catch (IOException e1) {
e1.printStackTrace();
}
}
e.detach();
}
private String viText(String node){
if (node!=null) {
if(node.indexOf("@")!=-1){
node = node.replaceAll(delimiter, BZF);
return node;
};
return node;
}return "";
}
public static void main(String[] args) throws FileIsNotFindException{
long startTime=System.currentTimeMillis();
new MainDataElementHandler("c:/11111/A01.xml","c:/11111/A01.csv",new String[]{"A0000NEW","A0194","A15Z101","A14Z101","A1701","ZZXW","ZZXL","QRZXW","QRZXL","A0140","XGSJ","XGR","A0117A","A0104A","A0165","A0198","A0149","A0148","A0199","A0187A","A0196","A01K01","A0192","A0195","A0148C","A0184","A0163","A0160","A0144","A3927","A3921","A0141","A0134","A0117","A0114A","A0114","A0111A","A0111","A0107","A0104","A0102","A0101","A0180","A0000","A0192B","A0192A","A015A","A0128","QRZXLXX","QRZXWXX","ZZXWXX","ZZXLXX","A0191"},"@");
long endTime=System.currentTimeMillis();
System.out.println("程序运行时间: " + (endTime - startTime)/1000 +"m");
}
}