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" );
    }
}

 

posted @ 2019-06-15 18:56  追梦滴小蜗牛  阅读(6092)  评论(0编辑  收藏  举报