java实现文件切片和合并的代码示例

网友投稿 269 2023-01-01


java实现文件切片和合并的代码示例

最近在学习大数据相关的知识点,其中需要实现文件的切片和合并,完整的java实现代码,以下贴出个人代码,仅供参考

首先建一个SplitUtil工具类,在工具类中有三个方法getSplitFile,getWrite,merge

1,文件拆分代码

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, fbegizjLbPn, fend);

}

//剩余部分文件写入到最后一份(如果不能平平均分配的时候)

if (length - offset > 0) {

//写入文件

getWrite(file, count-1, offset, length);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

2,getWrite文件写入代码

/**

* 指定文件每一份的边界,写入不同文件中

* @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;

}

3.文件合并代码

/**

* 文件合并

* @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), "rw");

//开始合并文件,对应切片的二进制文件

for (int i = 0; i < tempCount; i++) {

//读取切片文件

RandomAccessFile reader = new RandomAccessFile(new File(tempFile + "_" + i + ".tmp"), "r");

byte[] b = new byte[1024];

int n = 0;

while((n = reader.read(b)) != -1){

raf.write(b, 0, n);//一边读,一边写

}

}

} catch (Exception e) {

e.printStackTrace();

http:// }finally{

try {

raf.close();

} catch (IOException e) {

e.printSthttp://ackTrace();

}

}

最后在主程序里面调用就可以了

public static void main(String[] args) {

String file = "F:\\java-study\\img\\mv.jpg";

int count = 5;

//1.根据现有的文件编写文件编写文件切片工具类

//2.写入到二进制临时文件

// getSplitFile(file, count);

//3.根据实际的需求合并指定数量的文件

String tempFile = "F:\\java-study\\img\\img.jpg";

merge(file, tempFile, 5);

}

以上代码可实现图片,文档,mp3,mp4等文件的拆分与合并,下面是图片切片和拆分的效果图


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:接口测试工具的作用(接口测试工具的作用是)
下一篇:java实现批量下载 多文件打包成zip格式下载
相关文章

 发表评论

暂时没有评论,来抢沙发吧~