zoukankan      html  css  js  c++  java
  • 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" );
        }
    }
  • 相关阅读:
    使用Layui上传图片,并进行压缩(非原创,证实可用)
    mysql 存储过程及事件
    Redis一些简单的笔记
    RIOT 技术笔记-01 RIOT介绍
    杂七杂八-ubuntu安装eclipse
    杂七杂八-sqlyog连接mysql错误码2058
    杂七杂八-Mysql8.0忘记root密码
    RIOT学习笔记-01 cygwin安装
    Ubutun-安装远程桌面
    中间件-RocketMQ 02 Docker下的安装
  • 原文地址:https://www.cnblogs.com/oukele/p/11028518.html
Copyright © 2011-2022 走看看