根据关键字,查询文件夹内所有文件,并将含有该关键字的行作为新文本的内容

有一个月的日志,好几个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;
    }
}

猜你喜欢

转载自blog.csdn.net/dr_HuangChao/article/details/83060215