由于文件是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文档,不容易出错的