java 中如何实现大文件分成小文件,且内容不丢失

由于文件是G级别的,过于大,现在要拆分成小文件,然后进行查找检索,问:java中如何把大文件拆分成小文件,且内容不丢失?

RandomAccessFile+多线程好像可以实现

拆分重点:读和写用到的函数----读用FileInputStream,写用FileOutputStream!
[java] view plain copy
//输入:大文件路径

File taskfile = new File(taskfilePath);

InputStream file = new FileInputStream(taskfile);

//分批次上传任务

try {

long allSize = fileSize(taskfile);

//UploadPartSize:拆分的小文件大小

long num = allSize/UploadPartSize;

if(allSize%UploadPartSize != 0)

num++;

for(int i=0;i<num;i++) {  
    //上传任务  
    offset = i*UploadPartSize;  
    last="0";  
    int partSize = UploadPartSize;  
    if(i==num-1) {  
        last = "1";  
        partSize = (int)allSize%UploadPartSize;  
    }  
    byte[] buffer = new byte[partSize];  
    file.read(buffer);  
    File bufferStr = new File(zipfilePath + File.separator + "buffer");  
    if(!bufferStr.exists())  
        bufferStr.createNewFile();  

    //如果用下面的writeoutput,写入的大小总小于buffer的大小,不知道原因..切记只用fileoutput;  
    //或者说读写要用一套函数,不要乱用!读用FileInputStream,写用FileOutputStream!  
    //OutputStream out = new WriterOutputStream(fw);  
    OutputStream out = new FileOutputStream(bufferStr);  
    out.write(buffer);  
    out.flush();  
    out.close();  
    //上传操作**********  
}  
//校验总的上传的文件大小**********    

} catch (Exception e) {

e.printStackTrace();

}

or(int i=0;i<num;i++) {

//上传任务

offset = i*UploadPartSize;

last="0";

int partSize = UploadPartSize;

if(i==num-1) {

last = "1";

partSize = (int)allSize%UploadPartSize;

}

byte[] buffer = new byte[partSize];

file.read(buffer);

File bufferStr = new File(zipfilePath + File.separator + "buffer");

if(!bufferStr.exists())

bufferStr.createNewFile();

//如果用下面的writeoutput,写入的大小总小于buffer的大小,不知道原因..切记只用fileoutput;  
//或者说读写要用一套函数,不要乱用!读用FileInputStream,写用FileOutputStream!  
//OutputStream out = new WriterOutputStream(fw);  
OutputStream out = new FileOutputStream(bufferStr);  
out.write(buffer);  
out.flush();  
out.close();  
//上传操作**********  

}

//校验总的上传的文件大小**********

就是在拆的过程中。对每一块的内容进行确认,失败就重新切分,

找一个多线程下载源码看一下,那就是文件的分和合

使用文件流的方式,一行一行的读取,可以根据hashcode值,来确定该行数据分发的文件路径,这样便于查找

楼主是要干嘛?RandomAccessFile这个类可以直接移动指针,不用分也可以读取指定位置的数据

我现在是要做把一个文件分成小文件,但是不丢失原文件内容。比如:一个200M的word文档,现分成10个20M的word文档,并且这10个word文档里的内容合起来就是原文件的内容。 或者 一个很大的excel文档,现拆分成多个比较小的excel文档 。

请教一下有这种技术吗?或者说下思路呢?

请大神们指点指点呢?

pageOffice写word等office文档,不容易出错的