zoukankan      html  css  js  c++  java
  • java实现大文件的分割与合并

    最近遇到一个问题,某网盘上传文件时,文件大小超过了4个G ,不能上传,所以就想到了利用的java的IO流,将文件分割成多个小文件,上传到网盘上,等到需要用的时候,下载下来然后再进行文件的合并就可以了。

    这里以分割一个8.85M的PDF文件为例,分割成每个大小为1M的文件,分割文件的大小,只需修改size即可,代码如下:

    1.文件的分割

    public static void main(String[] args) throws IOException {
            
                //要分割出来的文件的大小
                int size = 1024*1024*1;//1M
                
                BufferedInputStream in = new BufferedInputStream(new FileInputStream(new File("D:\zzy\aaaa\fileSplit\java.pdf")));
                int len = -1;
                for (int i = 0; i < 9; i++) { //8.85M的文件分割成8个1M的,和一个0.85M的
                    File file = new File("D:\zzy\aaaa\fileSplit\" + i + "temp.temp");//分割的文件格式可以随便设置,只要文件合并时名称一致即可
                    FileOutputStream outputStream = new FileOutputStream(file);
                    BufferedOutputStream out = new BufferedOutputStream(outputStream);
                
                    int count = 0;
                    byte[] bt = new byte[1024 * 1024];//每次读取1M,数组大小不能太大,会内存溢出,通过目标文件大小size判断一下
                    while ((len = in.read(bt)) != -1) {
                    
                        out.write(bt, 0, len);
                        count += len;
                        if(count>=size) {
                            break;//每次读取1M,然后写入到文件中
                        }
                    }
                
                    out.flush();
                    out.close();
                    outputStream.close();
                
                    System.out.println("文件已完成:" + file.getName());
                }
        
                System.out.println("文件已完成分割====");
            }
    

      

    2.文件的合并

    public static void main(String[] args) throws IOException {
                
            //文件合并
    
                BufferedOutputStream out = new BufferedOutputStream(
                        new FileOutputStream(new File("D:\zzy\aaaa\fileSplit\java(merge).pdf")));
                
                for (int i = 0; i < 9; i++) { //9个文件合并成8.85M的文件
                    File file = new File("D:\zzy\aaaa\fileSplit\" + i + "temp.temp");
                    FileInputStream inputStream = new FileInputStream(file);
                    BufferedInputStream in = new BufferedInputStream(inputStream);
                    
                    int len = -1;
                    byte[] bt = new byte[1024 * 1024];//每次读取1M,数组大小不能太大,会内存溢出
                    while ((len = in.read(bt)) != -1) {
                    
                        out.write(bt, 0, len);
                    }
                
                    in.close();
                    inputStream.close();
                    out.flush();
                
                    System.out.println("文件已完成:" + file.getName());
                }
            
                System.out.println("文件已完成合并====");
            }            
    

      

  • 相关阅读:
    快速理解Kafka分布式消息队列框架
    消息系统Kafka介绍
    使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境
    CSS学习笔记(10)--nth-child和nth-of-type
    CSS学习笔记(9)--详解CSS中:nth-child的用法
    CSS学习笔记(8)--纯CSS绘制三角形(各种角度)
    CSS学习笔记(7)--html页面的CSS、DIV命名规则
    CSS学习笔记(6)--浮动,三列布局,高度宽度自适应
    CSS学习笔记(5)--导航ul,li浮动问题
    Git中保存用户名和密码
  • 原文地址:https://www.cnblogs.com/zhangzhiyong-/p/14972583.html
Copyright © 2011-2022 走看看