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