Java 實現大文件切割並生成多個文件


話不多說,直接上代碼

import java.io.*;

/***
 *  分割大文件
 * (
 *      SQL 文件太大(insert),第三方工具無法一次性讀取,進行分割
 *      生成 一個一個文件
 *  )
 */
public class SplitFileUtil {

    // 使用示例
    public static void main(String[] args) {
        
        // 目標文件
        String targetFile = "F:\\logs\\insert11.sql";
        // 存放的目錄
        String saveDir = "F:\\logs\\Insert";
        // 自定義的生成文件前綴名
        String saveFileName = "insert";
        // 生成文件格式的后綴
        String suffix = "sql";
        // 自定義 一個文件的行數,這里是 100000 行 一個文件
        long splitSize = 100000;
        try {
            splitFile(targetFile, saveDir, saveFileName, suffix, splitSize);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * @param targetFile 目標文件路徑
     * @param saveDir 存放的目錄
     * @param saveFileName 生成文件的前綴名
     * @param suffix 生成文件的后綴名
     * @param splitSize  每一個文件 多少行數據
     */
    public static void splitFile(String targetFile, String saveDir , String saveFileName, String suffix,long splitSize) throws Exception {

        if( !saveDir.endsWith("\\") ){
            saveDir += File.separator;
        }

        File file = new File(targetFile);
        if (!file.exists()) {
            throw new Exception("目標路徑:[ " + targetFile + " ] 有錯誤...");
        }
        // 輸入緩沖流
        BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));

        String str = null;
        // 行數
        long len = 0;

        System.out.println("開始寫入......請等待......");
        long startTime = System.currentTimeMillis();
        // 輸出緩沖流
        BufferedWriter writer = null;
        while ((str = reader.readLine()) != null) {

            // 當前 行 文件
            long txtSize = (len / splitSize) + 1;
            String fileName = saveDir + saveFileName + txtSize + "." + suffix;
            // 使用 BufferedWriter 如果 不進行 flush 或者 close 寫入不了內容。
            writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName, true)));
            writer.write(str + System.lineSeparator() );
            writer.flush();
            len ++;
        }
        writer.close();
        reader.close();

        System.out.println( "寫入完畢,一共 " + len + " 記錄,耗時:" + ( System.currentTimeMillis() - startTime ) / 1000 + " s" );
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM