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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对大文件实现分割及合并处理相关的知识,希望对你有一定的参考价值。

 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     }

 

以上是关于对大文件实现分割及合并处理的主要内容,如果未能解决你的问题,请参考以下文章

Java-使用IO流对大文件进行分割和分割后的合并

文件分割机

daily文件分割限速下载,及合并分割文件

第55题输入输出系列3-文件的天下大势

Java实现文件分割和文件合并实例

Java实现文件分割和文件合并实例