有一个月的日志,好几个G。
根据订单号查询错误订单信息,并且将查询到的数据写出,作为新的文本
package obj;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator;
/**
* TODO(请说明这个类的作用).
*
* @since JDK 1.8
* @author
* @Email
* @Date: 2018年9月12日 下午7:00:08
*/
public class bs {
static String path = "D:/logss/";
public static void main(String[] args) throws Exception {
/*
* long startTime = System.currentTimeMillis(); String path = "D:\\logs"; readLogFile(path);
* System.out.println(System.currentTimeMillis() - startTime);
*/
// 含有订单号的list
List<String> list = getFileContext("D:\\订单\\31.txt");
// log日志数据所在的文件夹
String filename = "D:\\logs\\7070\\2018-08-31";
// 遍历list,得到所有订单号
for (String string : list) {
System.out.println(string);
String filenameTemp = path + string + ".txt";
// 以单号建立txt
creatTxtFile(string, filenameTemp);
// 根据关键字,穿透搜索出内容
readLogFile(filename, string, filenameTemp);
// 将根据关键字查询的信息,放入txt中
// TextSearchFile.writeTxtFile(str);
}
}
public static void readLogFile(String path, String keyWord, String filenameTemp) {
File file = new File(path);
if (file.isDirectory()) {
for (String childPath : file.list()) {
readLogFile(path + File.separator + childPath, keyWord, filenameTemp);
}
} else {
File theFile = new File(path);
readLine(theFile, keyWord, filenameTemp);
}
}
public static void readLine(File theFile, String keyWord, String filenameTemp) {
System.out.println(theFile.getAbsolutePath());
LineIterator it = null;
try {
it = FileUtils.lineIterator(theFile, "UTF-8");
while (it.hasNext()) {
String line = it.nextLine();
// do something with line
if (line.contains(keyWord)) {
System.out.println(line);
writeTxtFile(line, filenameTemp);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
LineIterator.closeQuietly(it);
}
}
// 遍历txt,将每行单号放入list
public static List<String> getFileContext(String path) throws Exception {
FileReader fileReader = new FileReader(path);
BufferedReader bufferedReader = new BufferedReader(fileReader);
List<String> list = new ArrayList<String>();
String str = null;
while ((str = bufferedReader.readLine()) != null) {
if (str.trim().length() > 2) {
list.add(str);
}
}
return list;
}
/**
* 创建文件
*/
// private static String path = "D:/logss/";
public static boolean creatTxtFile(String name, String filenameTemp) throws IOException {
boolean flag = false;
// filenameTemp = path + name + ".txt";
System.out.println(filenameTemp);
File filename = new File(filenameTemp);
if (!filename.exists()) {
filename.createNewFile();
flag = true;
}
System.out.println(filenameTemp);
return flag;
}
/**
* 写文件
*/
public static boolean writeTxtFile(String newStr, String filenameTemp) throws IOException {
// 先读取原有文件内容,然后进行写入操作
boolean flag = false;
String filein = newStr + "\r\n";
String temp = "";
FileInputStream fis = null;
InputStreamReader isr = null;
BufferedReader br = null;
FileOutputStream fos = null;
PrintWriter pw = null;
try {
System.out.println(filenameTemp);
// 文件路径
File file = new File(filenameTemp);
// 将文件读入输入流
fis = new FileInputStream(file);
isr = new InputStreamReader(fis);
br = new BufferedReader(isr);
StringBuffer buf = new StringBuffer();
// 保存该文件原有的内容
for (int j = 1; (temp = br.readLine()) != null; j++) {
buf = buf.append(temp);
// System.getProperty("line.separator")
// 行与行之间的分隔符 相当于“\n”
buf = buf.append(System.getProperty("line.separator"));
}
buf.append(filein);
fos = new FileOutputStream(file);
pw = new PrintWriter(fos);
pw.write(buf.toString().toCharArray());
pw.flush();
flag = true;
} catch (IOException e1) {
// TODO 自动生成 catch 块
throw e1;
} finally {
if (pw != null) {
pw.close();
}
if (fos != null) {
fos.close();
}
if (br != null) {
br.close();
}
if (isr != null) {
isr.close();
}
if (fis != null) {
fis.close();
}
}
return flag;
}
}