public static void getSplitFile(String file,int count){
//预分配文件所占用的磁盘空间,在磁盘创建一个指定大小的文件,“r”表示只读,“rw”支持随机读写
try {
RandomAccessFile raf = new RandomAccessFile(new File(file), "r");
//计算文件大小
long length = raf.length();
System.out.println(length);
//计算文件切片后每一份文件的大小
long maxSize = length / count;
System.out.println(maxSize);
long offset = 0L;//定义初始文件的偏移量(读取进度)
//开始切割文件
for(int i = 0; i < count - 1; i++){ //count-1最后一份文件不处理
//标记初始化
long fbegin = offset;
//分割第几份文件
long fend = (i+1) * maxSize;
//写入文件
offset = getWrite(file, i, fbegin, fend);
}
//剩余部分文件写入到最后一份(如果不能平平均分配的时候)
if (length - offset > 0) {
//写入文件
getWrite(file, count-1, offset, length);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 指定文件每一份的边界,写入不同文件中
* @param file 源文件
* @param index 源文件的顺序标识
* @param begin开始指针的位置
* @param end 结束指针的位置
* @return long
*/
public static long getWrite(String file,int index,long begin,long end){
long endPointer = 0L;
try {
//申明文件切割后的文件磁盘
RandomAccessFile in = new RandomAccessFile(new File(file), "r");
//定义一个可读,可写的文件并且后缀名为.tmp的二进制文件
RandomAccessFile out = new RandomAccessFile(new File(file + "_" + index + ".tmp"), "rw");
//申明具体每一文件的字节数组
byte[] b = new byte[1024];
int n = 0;
//从指定位置读取文件字节流
in.seek(begin);
//判断文件流读取的边界
while(in.getFilePointer() <= end && (n = in.read(b)) != -1){
//从指定每一份文件的范围,写入不同的文件
out.write(b, 0, n);
}
//定义当前读取文件的指针
endPointer = in.getFilePointer();
//关闭输入流
in.close();
//关闭输出流
out.close();
} catch (Exception e) {
e.printStackTrace();
}
return endPointer;
}
/**
* 文件合并
* @param file 指定合并文件
* @param tempFile 分割前的文件名
* @param tempCount 文件个数
*/
public static void merge(String file,String tempFile,int tempCount) {
RandomAccessFile raf = null;
try {
//申明随机读取文件RandomAccessFile
raf = new RandomAccessFile(new File(file)
文件太大分片与合并(转)
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
CSV文件太大?教你用最简单的工具分割!
首先,我要介绍的是“一键表格拆分助手”。这是一个由“勤学道人”开发的高性能一键拆分工具,特别适合小白用户。
csv分割 csv分割工具 csv分割拆分工具软件 csv大文件大表格拆分分割工具