对大文件实现分割及合并处理

 1   public void cutFile(File bigFile,File destFile,int cutSize){
 2 
 3         FileInputStream inputStream = null;
 4         int size = 1024*1024; //1M
 5         try {
 6             if (!destFile.isDirectory()){ //如果保存分割文件的地址不是路径
 7                 destFile.mkdir(); //创建路径
 8             }
 9             size = size * cutSize; //分割文件大小以M为单位
10             int length = (int) bigFile.length(); //获取大文件大小(B为单位)
11             int num = length / size; //计算分割成小文件的个数(每个小文件大小是M为单位)
12             int yu = length % size; //除余的文件大小(M)
13 
14             String bigFilePath = bigFile.getAbsolutePath(); //获取大文件完整路径信息(包括文件名)
15             int fileNew = bigFilePath.lastIndexOf("."); //获取文件后缀前的“."的索引
16             String suffix = bigFilePath.substring(fileNew,bigFilePath.length()); //获取后缀,即文件类型
17 
18             inputStream = new FileInputStream(bigFile); //获取大文件的文件输入流
19             File[] smallFile = new File[num+1]; //创建保存小文件的文件数组
20             int begin = 0;
21             for (int i =0;i< num;i++){
22                 smallFile[i] = new File(bigFile.getAbsolutePath()+"\\"+(i+1)+suffix+".tem"); //指定小文件的名字
23                 if (!smallFile[i].isFile()){
24                     smallFile[i].createNewFile(); //创建该文件
25                 }
26                 FileOutputStream outputStream = new FileOutputStream(smallFile[i]); //创建小文件的文件输出流
27                 byte[] small = new byte[size];
28                 inputStream.read(small); //读取小文件字节
29                 outputStream.write(small); //向小文件中写入字节数据
30                 begin = begin + size;
31                 outputStream.close();
32             }
33             if (yu != 0){ ///除余的文件大小(M)部不为空
34                 smallFile[num] = new File(bigFile.getAbsolutePath()+"\\"+(num+1)+suffix+".tem");
35                 if (!smallFile[num].isFile()){
36                     smallFile[num].createNewFile(); //创建文件
37                 }
38                 FileOutputStream outputStream = new FileOutputStream(smallFile[num]);
39                 byte[] bytes = new byte[yu];
40                 inputStream.read(bytes); //读取字节
41                 outputStream.write(bytes); //向文件写入数据
42                 outputStream.close();
43             }
44         }catch (Exception e){
45             e.printStackTrace();
46         }
47     }

2.合并处理

 1   public void closeFile(File[] files,File closeDir,String hz){
 2         try {
 3             File closeFile = new File(closeDir.getAbsoluteFile()+"\\close"+hz); //指定合并后的文件名(包含路径)
 4             if (!closeFile.isFile()){
 5                 closeFile.createNewFile(); //创建文件
 6             }
 7 
 8             FileOutputStream outputStream = new FileOutputStream(closeFile); //创建文件输出流
 9             for (int i=0;i<files.length;i++){
10                 FileInputStream inputStream = new FileInputStream(closeFile); //创建文件输入流
11                 int len = (int) files[i].length(); //获取单个子文件大小
12                 byte[] bytes = new byte[len];
13                 inputStream.read(bytes);
14                 outputStream.write(bytes);
15                 inputStream.close();
16             }
17             outputStream.close();
18         }catch (Exception e){
19             e.printStackTrace();
20         }
21     }

 

转载于:https://www.cnblogs.com/jjlyx/p/7527808.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值