您的位置:首页 > 其它

stax和Do4j解析xml文件,并输出txt,zip,gz格式文件

2017-04-20 11:39 441 查看
package com.cn.boco.xml;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.FileWriter;

import java.io.IOException;

import java.io.InputStream;

import java.util.Iterator;

import java.util.zip.GZIPOutputStream;

import java.util.zip.ZipEntry;

import java.util.zip.ZipInputStream;

import java.util.zip.ZipOutputStream;

import javax.xml.stream.XMLInputFactory;

import javax.xml.stream.XMLStreamConstants;

import javax.xml.stream.XMLStreamReader;

import org.dom4j.Attribute;

import org.dom4j.Document;

import org.dom4j.Element;

import org.dom4j.io.SAXReader;

/**

 *@author  fangyitao

 *@date  2017年2月27日

 *@time  下午2:01:17 

 *@description stax和Do4j解析xml文件,输出到txt,zip,gz文件

 *@return

 */

public class demo2 {

public static void main(String[] args) {
//源文件(zip文件)
File file = new File("C:\\Users\\fangyitao\\Desktop\\实习生练习任务\\xml文件\\TD-LTE_MRS_ZTE_OMC1_375237_20170206153000.zip");
//目标文件夹(用来存放输出的文件)
File targetFile = new File("C:\\Users\\fangyitao\\Desktop\\实习生练习任务\\xml文件");

//stax解析输出文本,zip,gz格式
unXmlFromStax(deZip(file, targetFile),targetFile);
//Do4j解析输出文本,zip,gz格式
unXmlFromDo4j(deZip(file, targetFile),targetFile);
}

//解压zip文件
public static File deZip(File file,File targetFile){
File orgFile = null;
try {
ZipInputStream Zin=new ZipInputStream(new FileInputStream(file));

BufferedInputStream Bin=new BufferedInputStream(Zin);

ZipEntry entry;
while((entry = Zin.getNextEntry())!=null && !entry.isDirectory()){

orgFile = new File(targetFile.getName(),entry.getName());

if(!orgFile.exists()){  

                    (new File(targetFile.getName())).mkdirs();  

                } 
FileOutputStream out=new FileOutputStream(orgFile);

BufferedOutputStream Bout = new BufferedOutputStream(out);
int num;
while((num = Bin.read())!= -1){
Bout.write(num);
}
Bout.close();  

                 out.close();  

                 //System.out.println(orgFile.getParent());

                 //System.out.println(orgFile+"解压成功");
}
Bin.close();  

            Zin.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return orgFile;

}

//解析xml文件(stax解析)
public static void unXmlFromStax(File file,File orgFile){
System.out.println(file.getName());
InputStream stream;
try {
stream = new FileInputStream(file);
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader reader = factory.createXMLStreamReader(stream);

String mrName = null;
String smr = null;
String objectID = null;
String v = null;

GZIPOutputStream gzos = null;
ZipOutputStream zout = null;
File targetFile = null;
BufferedWriter bw = null;
while(reader.hasNext()){

int event = reader.next();
if(event == XMLStreamConstants.START_DOCUMENT){
System.out.println("文档开始");
}else if(event == XMLStreamConstants.END_DOCUMENT){
System.out.println("文档结束");
}else if(event == XMLStreamConstants.START_ELEMENT){

if(reader.getLocalName().equalsIgnoreCase("measurement")){

mrName = reader.getAttributeValue(0);
if(targetFile!=null){
String name1 = targetFile.getName();
String name2 = mrName+".txt";
if(!name1.equals(name2)){
closes(bw,zout, gzos);
//gzos.close();
//zout.close();
//bw.close();

//输出流
bw  = unTxt(targetFile, mrName);//文本格式
gzos = unGz(targetFile, mrName);//gz格式
zout = unZip(targetFile, mrName);//zip格式
}

}
if(mrName!= null){
//targetFile = new File("C:\\Users\\fangyi
4000
tao\\Desktop\\实习生练习任务\\xml文件");
targetFile = orgFile;
if(targetFile.isDirectory()){

//输出流
bw  = unTxt(targetFile, mrName);//文本格式
zout = unZip(targetFile, mrName);//zip格式
gzos = unGz(targetFile, mrName);//gz格式
}
}
//System.out.println(mrName);
}else if(reader.getLocalName().equalsIgnoreCase("smr")){
smr = reader.getElementText();
//System.out.println(smr);
}else if(reader.getLocalName().equalsIgnoreCase("object")){
objectID = reader.getAttributeValue(0);
}else if(reader.getLocalName().equalsIgnoreCase("v")){
v = reader.getElementText();
}

if(smr != null&&objectID != null){
//数据输出
unGz(gzos, "objectID:"+objectID+"======smr:"+smr+"\r\n");//gz格式
unZip(zout,"objectID:"+objectID+"======smr:"+smr+"\r\n");//zip格式
unTxt(bw,"objectID:"+objectID+"======smr:"+smr+"\r\n");//文本格式
objectID = null;
System.out.println("写入bojectID");

}if(v != null){
//数据输出
unGz(gzos, "v:"+v+"\r\n");//gz格式
unZip(zout,"v:"+v+"\r\n");//zip格式
unTxt(bw,"v:"+v+"\r\n");//文本格式
v = null;
System.out.println("写入V");
}
}
}
//gzos.close();
//zout.close();
//bw.close();
closes(bw,zout, gzos);
} catch (Exception e) {

e.printStackTrace();
}

}

//解析xml文件(Do4j解析)
public static void unXmlFromDo4j(File file,File orgFile){
System.out.println(file.getName());
System.out.println(file.getPath());
SAXReader sax = new SAXReader();//创建一个SAXReader对象 
try {
Document document=sax.read(file);//获取document对象
Element root=document.getRootElement();//获取根节点 

String mrName = null;
String smr = null;
String objectID = null;
String v = null;

GZIPOutputStream gzos = null;
ZipOutputStream zout = null;
File targetFile = null;
BufferedWriter bw = null;

//迭代器遍历根节点
Iterator rootIt = root.elementIterator();

while(rootIt.hasNext()){
Element element = (Element) rootIt.next();
if(element.getName().equals("eNB")){
Iterator eIt = element.elementIterator();
while(eIt.hasNext()){
Element eElement = (Element) eIt.next();
if(eElement.getName().equals("measurement")){
//获取measurement节点的属性值
Iterator mIt = eElement.attributeIterator();
while(mIt.hasNext()){
Attribute a = (Attribute) mIt.next();
if(a.getName().equals("mrName")){
mrName = a.getValue();
if(targetFile!=null){
String name1 = targetFile.getName();
String name2 = mrName+".txt";
if(!name1.equals(name2)){
closes(bw,zout, gzos);
//gzos.close();
//zout.close();
//bw.close();

//输出流
bw  = unTxt(targetFile, mrName);//文本格式
gzos = unGz(targetFile, mrName);//gz格式
zout = unZip(targetFile, mrName);//zip格式
}
}
if(mrName!= null){
//targetFile = new File("C:\\Users\\fangyitao\\Desktop\\实习生练习任务\\xml文件");
targetFile = orgFile;
if(targetFile.isDirectory()){

//输出流
bw  = unTxt(targetFile, mrName);//文本格式
zout = unZip(targetFile, mrName);//zip格式
gzos = unGz(targetFile, mrName);//gz格式
}
}
}
}
//获取measurement节点的子节点
Iterator  it = eElement.elementIterator();
while(it.hasNext()){
Element  mElement = (Element) it.next();
if(mElement.getName().equals("smr")){
smr = mElement.getText();

}
if(mElement.getName().equals("object")){
//获取object节点的属性值
Iterator  oIt = mElement.attributeIterator();
while(oIt.hasNext()){
Attribute object = (Attribute) oIt.next();
if(object.getName().equals("id")){
objectID = object.getValue();

//数据输出
unGz(gzos, "objectID:"+objectID+"======smr:"+smr+"\r\n");//gz格式
unZip(zout,"objectID:"+objectID+"======smr:"+smr+"\r\n");//zip格式
unTxt(bw,"objectID:"+objectID+"======smr:"+smr+"\r\n");//文本格式
objectID = null;
System.out.println("写入objectID");

}
}
//获取object节点下的子节点
Iterator vIt = mElement.elementIterator();
while(vIt.hasNext()){
Element oElement = (Element) vIt.next();
if(oElement.getName().equals("v")){
v = oElement.getText();

//数据输出
unGz(gzos, "v:"+v+"\r\n");//gz格式
unZip(zout,"v:"+v+"\r\n");//zip格式
unTxt(bw,"v:"+v+"\r\n");//文本格式
v = null;
System.out.println("写入V");
}
}

}

}
}
}

}

}

  closes(bw,zout,gzos);

  System.out.println("解析完成");
} catch (Exception e) {
e.printStackTrace();
}
}

//创建文本输出流(txt)
public static BufferedWriter  unTxt(File targetFile,String mrName){
BufferedWriter bw = null;
targetFile = new File(targetFile.getAbsolutePath()+"\\"+mrName+".txt");
try {
targetFile.createNewFile();
bw  = new BufferedWriter(new FileWriter(targetFile,true));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bw;
}

//输出文本格式
public static void unTxt(BufferedWriter bw,String str){
try {
bw.write(str);
} catch (IOException e) {
e.printStackTrace();
}
}
//创建zip输出流
public static ZipOutputStream  unZip(File targetFile,String mrName){
ZipOutputStream zout = null;
try {
zout = new ZipOutputStream(new FileOutputStream(targetFile+"\\"+mrName+".zip"));
ZipEntry entry = new ZipEntry(mrName+".txt");
zout.putNextEntry(entry);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return zout;

//压缩成zip格式
public static void unZip(ZipOutputStream zout,String str){
try {
zout.write(str.getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

//创建Gz输出流
public static GZIPOutputStream  unGz(File targetFile,String mrName){
GZIPOutputStream gzos = null;
try {
gzos = new GZIPOutputStream(new FileOutputStream(targetFile+"\\"+mrName+".txt.gz"));

} catch (Exception e) {
e.printStackTrace();
}
return gzos;


//压缩成GZ格式
public static void unGz(GZIPOutputStream gzos,String str){
try {
gzos.write(str.getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

//关闭流(文本,zip,gz)
public static void closes(BufferedWriter bw,ZipOutputStream zip,GZIPOutputStream gz){
try {
bw.close();
zip.close();
gz.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  stax Do4j xml GZ文件 ZIP