Java 实现大文件切割并生成多个文件

Posted oukele

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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" );
    

 

以上是关于Java 实现大文件切割并生成多个文件的主要内容,如果未能解决你的问题,请参考以下文章

Linux 大文件如何切割与合并?

Shell脚本切割日志

linux切割、备份大的nohup日志文件

实现对nginx日志切割

使用ffmpeg从视频文件中提取音频文件视频抽帧和切割视频

Linux 大文件如何切割与合并?