java文件分割和合并

package search;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class Split {

    /**每个小文件大小*/
    static final int SIZE = 1024*1024*5;
    /**需要分割的文件*/
    static final String SOURCE = "E:/t_question.sql";
    /**分割后输出的目录*/
    static final String SOURCE_OUT = "E:/test/";
    /**合并后的文件*/
    static final String DST = "G:/quesion.sql";

    public static void main(String[] args) throws IOException{
        split();
    }
    /**
     * 文件分割
     * @throws IOException
     */
    public static void split() throws IOException{

        File file = new File(SOURCE);
        FileInputStream raf = new FileInputStream(file);
        FileChannel fc = raf.getChannel();
        long fileSize = fc.size();

        int count = (int) (fileSize/SIZE);
        ByteBuffer dst = ByteBuffer.allocate(SIZE);
        for(int i=0 ; i <=count  ; i++){
            FileOutputStream fs = new FileOutputStream(new File(SOURCE_OUT+i));
            if(i!=count){
                fc.read(dst,SIZE*i);
                fs.write(dst.array());
            }else{
                fileSize = fileSize -SIZE*count;
                System.out.println(fileSize);
                ByteBuffer dstTail = ByteBuffer.allocate((int) fileSize);
                fs.write(dstTail.array());
            }
            fs.flush();
            dst.clear();
        }

    }

    /**
     * 合并文件
     * @throws Exception
     */
    public static void merge()throws Exception{
        File parentFile = new File(SOURCE_OUT);
        File fileDst = new File(DST);
        FileChannel fs =  new FileOutputStream(fileDst, true).getChannel();
        try{
             for(File file :parentFile.listFiles()){
                 FileChannel fc = new FileInputStream(file).getChannel();
                 ByteBuffer by = ByteBuffer.allocate((int) fc.size());
                 fc.read(by);
                 by.position(0);
                 fs.write(by);

             }
        }finally{
            fs.close();
        }
    }
}

java文件分割和合并

时间: 2024-10-10 07:44:22

java文件分割和合并的相关文章

java:快速文件分割及合并

文件分割与合并是一个常见需求,比如:上传大文件时,可以先分割成小块,传到服务器后,再进行合并.很多高大上的分布式文件系统(比如:google的GFS.taobao的TFS)里,也是按block为单位,对文件进行分割或合并. 看下基本思路: 如果有一个大文件,指定分割大小后(比如:按1M切割) step 1: 先根据原始文件大小.分割大小,算出最终分割的小文件数N step 2: 在磁盘上创建这N个小文件 step 3: 开多个线程(线程数=分割文件数),每个线程里,利用RandomAccessF

(转)java:快速文件分割及合并

文件分割与合并是一个常见需求,比如:上传大文件时,可以先分割成小块,传到服务器后,再进行合并.很多高大上的分布式文件系统(比如:google的GFS.taobao的TFS)里,也是按block为单位,对文件进行分割或合并. 看下基本思路: 如果有一个大文件,指定分割大小后(比如:按1M切割) step 1: 先根据原始文件大小.分割大小,算出最终分割的小文件数N step 2: 在磁盘上创建这N个小文件 step 3: 开多个线程(线程数=分割文件数),每个线程里,利用RandomAccessF

c语言文件分割与合并

一.综述 c语言操作文件通过文件指针FILE*,每个要操作的文件必须打开然后才能读写. 注意事项: @1分割与合并文件最好使用二进制模式即"rb"或"wb",这样可以操作任何类型文件 @2FILE 指针一定要进行判空操作即看F == NULL成立不 @3文件用完必须关闭,释放系统资源,因为文件会分配缓冲区,占据内存 1.包含头文件 _CRT_SECURE_NO_WARNINGS表示关闭安全检查 1 #define _CRT_SECURE_NO_WARNINGS 2

源码:windows文件分割与合并

#include <Windows.h> #include <vector> #include <string> using namespace std; //判断文件是否存在 bool FileExistsW(const wstring &fn) { WIN32_FIND_DATAW fd; HANDLE hFile = FindFirstFileW(fn.c_str(),&fd); if (hFile != INVALID_HANDLE_VALUE)

文件分割与合并(Java)

一.文件分割示意图 二.文件合并示意图 方式一:通过文件追加的方式 方式二:通过SequenceInputStream对其他输入流的逻辑串联. 测试RandomAccessFile随机访问文件 package FileSplitMerge; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import IOOthers.FileUtil; /** * RandomAccessFil

python学习——大文件分割与合并

在平常的生活中,我们会遇到下面这样的情况: 你下载了一个比较大型的游戏(假设有10G),现在想跟你的同学一起玩,你需要把这个游戏拷贝给他. 然后现在有一个问题是文件太大(我们不考虑你有移动硬盘什么的情况),假设现在只有一个2G或4G的优盘,该怎么办呢? 有很多方法,例如winrar压缩的时候分成很多小卷,这里不累述. 在学习python之后,我们自己就可以解决这个问题啦. 我们可以自己写一个脚本去分割合并文件,将文件分割成适合优盘大小的小文件,在拷贝,然后再合并. 下面是文件分割脚本: 1 im

c# 文件分割与合并

工作中遇到要上传下载的功能,而中间接收的服务器最大只能接收200M的文件,对于大文件无法满足,所以只能在上传的时候对大于100M的文件进行分割,分割成的小文件为原大文件名+.temp+i.在下载端,下载完成后再对其进行合并. 思路:文件的分割与合并就是将文件先转换成流再对其进行操作. /// <summary> /// 分割文件方法 /// </summary> /// <param name="filePath">被分割文件</param&g

delphi 文件分割与合并

流的使用分割与合并文件的函数 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure

Java 文件分块及合并

利用Base64编码,再截字符串,仅支持小文件小文件文件名随机,所以要将大文件信息和小文件顺序写入到小文件的第一行 <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.6</version> </dependency> import org.apache.commons.c