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" );
        }
    }
  • 相关阅读:
    Maven关于web.xml中Servlet和Servlet映射的问题
    intellij idea的Maven项目运行报程序包找不到的错误
    修改Maven项目默认JDK版本
    刷题15. 3Sum
    刷题11. Container With Most Water
    刷题10. Regular Expression Matching
    刷题5. Longest Palindromic Substring
    刷题4. Median of Two Sorted Arrays
    刷题3. Longest Substring Without Repeating Characters
    刷题2. Add Two Numbers
  • 原文地址:https://www.cnblogs.com/oukele/p/11028518.html
Copyright © 2011-2022 走看看