快捷搜索: 王者荣耀 脱发

【Java代码】:实现文本文件合并

【代码说明】

解释:

基于面向对象的思想,代码的可扩展性强; 利于嫁接其他代码,实现更为强大的功能;

思路:

遍历文件根目录,找出所有要合并的文本文件; 遍历文件夹,然后通过文件过滤器找出文本文件;
以行读的方式读取文本文件,后写入目标文件; 通过基础的IO操作,对每一个符合条件的都进行;

诉求:

【实现代码】

import java.io.*;
import java.nio.charset.StandardCharsets;

/**
 * 文本文件的合并
 *
 * @author SUNxRUN
 */
public class TextUnite {
          
   

    // 要合并的文本内容最终保存的文件
    public File targetFile = new File("E://AAAAA.txt");

    /**
     * 遍历一个文件目录内的所有相关的文件
     * 利用递归的方法遍历文件夹内所有的文件
     *
     * @param sourceDir 要合并的文本文件所在的根目录
     */
    public void documentTraversal(File sourceDir) {
          
   
        if (sourceDir.isFile()) {
          
   
            System.out.println(sourceDir.getAbsolutePath());
        } else {
          
   
            File[] fileList = sourceDir.listFiles(
                    // 定义要留下的文件
                    (f) -> f.getName().contains(".txt")
            );
            if (fileList != null && fileList.length > 0) {
          
   
                for (File f : fileList) {
          
   
                    if (f.isFile()) {
          
   
                        // 开始合并文本的操作
                        fileCopy(f);
                    } else {
          
   
                        documentTraversal(f);
                    }
                }
            }
        }
    }

    /**
     * 复制一个文本文件的内容到另一个文本文件中
     *
     * @param sourceFile 要复制的文本文件
     */
    public void fileCopy(File sourceFile) {
          
   

        FileInputStream fis;
        InputStreamReader isr;
        BufferedReader br = null;

        FileOutputStream fos;
        OutputStreamWriter osw;
        BufferedWriter bw;
        PrintWriter pw = null;

        try {
          
   
            // 输入流的创建
            fis = new FileInputStream(sourceFile);
            isr = new InputStreamReader(fis, StandardCharsets.UTF_8);
            br = new BufferedReader(isr);
            // 输出流的创建
            fos = new FileOutputStream(targetFile, true);
            osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8);
            bw = new BufferedWriter(osw);
            pw = new PrintWriter(bw, true);

            // 输入一行空行分割文本文件内容
            // 当多个文本文件合并时,便于区分
            pw.println("");
            // 文本内容复制操作
            String line;
            while ((line = br.readLine()) != null) {
          
   
                pw.println(line);
            }
        } catch (Exception e) {
          
   
            e.printStackTrace();
        } finally {
          
   
            pw.close();
            try {
          
   
                br.close();
            } catch (IOException e) {
          
   
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
          
   
        TextUnite textUnite = new TextUnite();
        textUnite.documentTraversal(new File("E:/"));
    }

}
经验分享 程序员 微信小程序 职场和发展