2017年4月9日星期日

抽出文本文件中特定的行

package test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RWFile3 {
/**
* 行処理 get the [001 \t Request-URI \t /g01c/index.php] by regx
*
* @param srcLineString
*            行の全文字列
* @param fileNo
*            ファイルの開始の数字。例:001
*/
public static String getStringByRegxFromLine(String srcLineString, String fileNo) {

String ret = "";
// [Request-URI:XXXXXXXXXX.\n] => [XXXXXXXXXX]
// (?<=Request-URI:) (?=\\.$) 零宽断言
String requestURIPattern = "(?<=Request-URI:).*(?=\\.$)";
String imapPattern = "(?<=Request Command:)TAG.*?(?=,\\sResult)";

// Request-URI
Pattern rRequestURI = Pattern.compile(requestURIPattern);
Matcher mRequestURI = rRequestURI.matcher(srcLineString);
if (mRequestURI.find()) {
ret = "\t" + fileNo + "\tRequest-URI\t" + mRequestURI.group(0);
} else {
// Request Command:TAG
Pattern rIMAP = Pattern.compile(imapPattern);
Matcher mIMAP = rIMAP.matcher(srcLineString);
if (mIMAP.find()) {
ret = "\t" + fileNo + "\tIMAP\t" + mIMAP.group(0);
}
}
return ret;
}

/**
* 使用BufferedReader类读文本文件
*/
public static int readLogAndWrite(String filePath, BufferedWriter out) {

int ret = 0;
// fileNoを取得 例:001
String fileNo = filePath.replaceAll("(?<=\\d{3})_.*txt", "").replaceAll(".*(?=\\d{3})", "");

String line = "";
try {
BufferedReader in = new BufferedReader(new FileReader(filePath));
line = in.readLine();
ret++;
String resultLine = "";
while (line != null) {
// 行処理
resultLine = getStringByRegxFromLine(line, fileNo);
if (!"".equals(resultLine)) {
out.write(resultLine + "\r\n");
ret++;
}

line = in.readLine();
}
in.close();
} catch (IOException e) {
e.printStackTrace();
}
return ret;
}

/**
* フォルダに全体のログを操作
*
* @param path
*            ログフォルダ
* @param resultPathFile
*            結果ファイル
*/

public static void doAllFileInDir(String path, String resultPathFile01, String resultPathFile02) {

try {
BufferedWriter out01 = new BufferedWriter(new FileWriter(resultPathFile01));
BufferedWriter out02 = new BufferedWriter(new FileWriter(resultPathFile02));

File f = new File(path);
File[] fs = f.listFiles();
int lineCnt01 = 0;
int lineCnt02 = 0;
for (int i = 0; i < fs.length; ++i) {
File f2 = fs[i];
if (f2.isDirectory()) {
// doAllFileInDir(f2.getPath());
} else if (f2.getName().contains("01.txt")) {
String filePath = f2.getPath();
lineCnt01 = readLogAndWrite(filePath, out01);
} else if (f2.getName().contains("02.txt")) {
String filePath = f2.getPath();
lineCnt02 = readLogAndWrite(filePath, out02);

int cntDiff = lineCnt01 - lineCnt02;
if(cntDiff>0){
for(int j = 0; j< cntDiff; j++){
out02.write("\t-\t-\t-\r\n");
}
} else if(cntDiff<0){
for(int k = 0; k< -cntDiff; k++){
out01.write("\t-\t-\t-\r\n");
}
}
}
}
out01.close();
out02.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

public static void main(String[] args) {
String path = "C:/21log/t";
String resultPathFile01 = "C:/21log/r1.txt";
String resultPathFile02 = "C:/21log/r2.txt";
doAllFileInDir(path, resultPathFile01, resultPathFile02);
}
}

没有评论:

发表评论