做项目的时候,需要将txt文件转换成xml文件,就做了一下记录,本文的一个逻辑主要在于,它根据每分钟创建一个xml文件、每天创建一个xml文件、根据txt文档的一个属性来判断txt属于什么类型来创建对应的xml,及不管是每分钟还是每天创建的,都存放到一个总的文件夹中。
import java.io.BufferedReader;
import java.io.File;import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.jdp.common.util.StringUtils;
public class TxtToXml2 {
@SuppressWarnings("resource")
public static void txtToXML(String txtPath) throws IOException
{
File file = new File(txtPath);
Document document = DocumentHelper.createDocument();
Element list = document.addElement("list");
BufferedReader br = new BufferedReader(new FileReader(file));
String line = br.readLine();
List<String> type=new ArrayList<String>();//判断类型生成的xml放到对应的类型文件夹中
String str="";
while(line!=null)
{
String temp[] = line.split(" ");
Element log = list.addElement("log");
Element time = log.addElement("time");
Element ip = log.addElement("ip");
Element httpType = log.addElement("httpType");
Element url = log.addElement("url");
Element httplevel = log.addElement("httplevel");
Element linuxVersion = log.addElement("linuxVersion");
Element os = log.addElement("os");
Element AndroidVersion = log.addElement("AndroidVersion");
Element phoneType = log.addElement("phoneType");
for(int i = 0;i<temp.length;i++)
{
time.setText(temp[0]);
ip.setText(temp[1]);
str=temp[2];
httpType.setText(temp[2]);
url.setText(temp[3]);
httplevel.setText(temp[4]);
linuxVersion.setText(temp[9]);
os.setText(temp[10]);
AndroidVersion.setText(temp[12]);
phoneType.setText(temp[13]);
}
line = br.readLine();
type.add(str);
}
System.out.println(type);
createStyleXml(document,type);
System.out.println(txtPath+"进来了");
}
private static void createStyleXml(Document document,List<String> type) throws UnsupportedEncodingException, IOException {
// 设置XML文档格式
OutputFormat format = OutputFormat.createPrettyPrint();
// 设置XML编码方式,即是用指定的编码方式保存XML文档到字符串(String),这里也可以指定为GBK或是ISO8859-1
format.setEncoding("UTF-8");
//outputFormat.setSuppressDeclaration(true); //是否生产xml头
//设置是否缩进
format.setIndent(true);
//以四个空格方式实现缩进
format.setIndent(" ");
//设置是否换行
format.setNewlines(true);
//xml写出,以下载的方式
//XMLWriter写出
// XMLWriter writer = null;
// writer = new XMLWriter(getResponse().getOutputStream(), format);
// //设置是否转义,默认值是true,代表转义
// writer.setEscapeText(false);
//
// //让浏览器识别是什么类型的文件
// getResponse().reset(); // 重点突出
// getResponse().setCharacterEncoding("UTF-8"); // 重点突出
// getResponse().setContentType("application/x-msdownload");// 不同类型的文件对应不同的MIME类型 // 重点突出
// // inline在浏览器中直接显示,不提示用户下载
// // attachment弹出对话框,提示用户进行下载保存本地
// // 默认为inline方式
// getResponse().setHeader("Content-Disposition", "attachment;filename="+ UUID.randomUUID()+".xml");
// writer.write(document);
// writer.close();
//xml写出,写到本地
Date date=new Date();
SimpleDateFormat sim=new SimpleDateFormat("yyyyMMddHHmmss");
String time = sim.format(date);
String minute= (String) time.subSequence(0, 12);//每分钟--获取分钟 minute
String day= (String) time.subSequence(0, 8);//每天---获取天数 day
File createMinuteFile=new File("D:\\log\\"+minute);
//文件夹不存在就创建文件夹--对应的是每分钟--即当前文件夹
if(!createMinuteFile.exists()) {
createMinuteFile.mkdir();
}
File createDayFile=new File("D:\\log\\"+day);
//判断当天的文件夹是否存在,不存在就创建
if(!createDayFile.exists()) {
createDayFile.mkdir();
}
//url区
String name=time+".xml";
String url;
String urlDay;
String urlType = null;
String urlAll = null;
//循环type集合
File createTypeFile=null;
for (String ty : type) {
createTypeFile=new File("D:\\log\\"+ty);
//类型存放
if(!createTypeFile.exists()) {
createTypeFile.mkdir();
}
//判断当为GET类型的时候,要存到对应的GET文件夹中,要存到ALL文件夹中,要存到对应的当日中
if(ty.equals("GET")) {
urlType="D:\\log\\"+"GET"+"\\"+name;
//存在对应的GET类型的文件夹中
if(StringUtils.isNotEmpty(urlType)) {
Writer filewriterType = new FileWriter(urlType);
XMLWriter xmlWriter = new XMLWriter(filewriterType,format);
xmlWriter.write(document);
xmlWriter.close();
}
//存到对应的ALL文件夹中
//全部存放
File createAllFile=new File("D:\\log\\All\\"+ty+"\\");
if(!createAllFile.exists()) {
createAllFile.mkdir();
}
urlAll="D:\\log\\All\\"+ty+"\\"+name;
if(StringUtils.isNotEmpty(urlAll)) {
Writer filewriterAall = new FileWriter(urlAll);
XMLWriter xmlWriter = new XMLWriter(filewriterAall,format);
xmlWriter.write(document);
xmlWriter.close();
System.out.println("All下载成功");
}
}
if(ty.equals("POST")) {
urlType="D:\\log\\"+"POST"+"\\"+name;
//存在对应的GET类型的文件夹中
if(StringUtils.isNotEmpty(urlType)) {
Writer filewriterType = new FileWriter(urlType);
XMLWriter xmlWriter = new XMLWriter(filewriterType,format);
xmlWriter.write(document);
xmlWriter.close();
}
//存到对应的ALL文件夹中
//全部存放
File createAllFile=new File("D:\\log\\All\\"+ty+"\\");
if(!createAllFile.exists()) {
createAllFile.mkdir();
}
urlAll="D:\\log\\All\\"+ty+"\\"+name;
if(StringUtils.isNotEmpty(urlAll)) {
Writer filewriterAall = new FileWriter(urlAll);
XMLWriter xmlWriter = new XMLWriter(filewriterAall,format);
xmlWriter.write(document);
xmlWriter.close();
System.out.println("All下载成功");
}
}
}
//当前文件夹--每分钟创建的xml都存放的当前每分钟创建的文件夹中
if(name.indexOf(minute)>=0) {
url="D:\\log\\"+minute+"\\"+name;
}
url="D:\\log\\"+minute+"\\"+name;
//对应的是当日文件夹
if(name.indexOf(day)>=0) {
urlDay ="D:\\log\\"+day+"\\"+name;
}
urlDay="D:\\log\\"+day+"\\"+name;
//下载生成
if(StringUtils.isNotEmpty(url)) {
Writer filewriter = new FileWriter(url);
XMLWriter xmlWriter = new XMLWriter(filewriter,format);
xmlWriter.write(document);
xmlWriter.close();
}
if(StringUtils.isNotEmpty(urlDay)) {
Writer filewriterDay = new FileWriter(urlDay);
XMLWriter xmlWriterDay = new XMLWriter(filewriterDay,format);
xmlWriterDay.write(document);
xmlWriterDay.close();
}
System.out.println("导出成功");
}
public static void main(String args[]) throws IOException
{
//在D:\\log\\下有多个文件,多去多个文件
String st="D:\\log\\";
String[] strArr={st+"test.txt",st+"test3.txt",st+"test2.txt"};for (String string : strArr) {
TxtToXml.txtToXML(string);
}
}
}