• 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("文件已完成合并====");
            }            
    

      

  • 相关阅读:
    软件配置管理
    VS2008单元测试之NUnit集成与应用(转)
    说说委托,匿名委托,Lamda表达式
    六种方式实现hibernate查询
    AjaxControl验证占位问题
    UL+Li常用效果
    Linq 方法表
    让枚举成员显示出中文信息(转)
    Linq to SQL 插入和获取ID
    正则表达式收集
  • 原文地址:https://www.cnblogs.com/zhangzhiyong-/p/14972583.html
Copyright © 2020-2023  润新知