/** * * @param commFile 需要分割的文件 * @param untieFile 分割后保存的文件 * @param filesize 分割多少个 */ public void fenGe(File commFile,File untieFile,int filesize){ FileInputStream fis=null; //用来指定分割文件以MB为单位 int size =1024*1024; try { //如果保存分割文件地址不是路径 if(untieFile.isDirectory()){ //创建该路径 untieFile.mkdirs(); } size=size*filesize; //获取文件大小 int length=(int)commFile.length(); //获取文件大小除以MB的得数 int num=length/size; //获取文件大小与MB相除的余数 int yu=length % size; //获取保存文件的完成路径信息 String newfengeFile=commFile.getAbsolutePath(); int fileNew =newfengeFile.lastIndexOf("."); //截取字符串 String strNew= newfengeFile.substring(fileNew,newfengeFile.length()); //创建FileInputStream类对象 fis=new FileInputStream(commFile); //创建文件数组 File[] fl=new File[num+1]; int begin=0; //循环遍历数组 for(int i=0;i<num;i++){ //指定分割后小文件的文件名 fl[i]=new File(untieFile.getAbsolutePath()+"\\"+(i+1)+strNew+".tem"); if(!fl[i].isFile()){ //创建该文件 fl[i].createNewFile(); } FileOutputStream fos=new FileOutputStream(fl[i]); byte[] bl=new byte[size]; //读取分割后的小文件 fis.read(bl); //写文件 fos.write(bl); begin=begin+size*1024*1024; //关闭流 fos.close(); } //文件大小与指定文件分割大小相除的余数不为0; if(yu !=0){ //指定文件分割后数组中最后一个文件名 fl[num]=new File(untieFile.getAbsolutePath()+"\\"+(num+1)+strNew+".tem"); if(!fl[num].isFile()){ //新建文件 fl[num].createNewFile(); } FileOutputStream fyu=new FileOutputStream(fl[num]); byte[] byt=new byte[yu]; fis.read(byt); fyu.write(byt); fyu.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 合并文件 * @param file 需要合并的文件 * @param cunDir 合并后的文件 * @param hz */ public void heBing(File[] file,File cunDir, String hz){ try { //指定分割后文件的文件名 File heBingFile=new File(cunDir.getAbsoluteFile()+"\\UNTIE"+hz); if(!heBingFile.isFile()){ heBingFile.createNewFile(); } //创建FileOutputStream对象 FileOutputStream fos=new FileOutputStream(heBingFile); //循环遍历要进行合并的文件数组对象 for(int i=0;i<file.length;i++){ FileInputStream fis=new FileInputStream(file[i]); //获取文件长度 int len=(int)file[i].length(); byte[]bRead=new byte[len]; //读取文件 fis.read(bRead); //写入文件 fos.write(bRead); //将流关闭 fis.close(); } fos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
【I/O流】对大文件实现分割、合并处理
猜你喜欢
转载自blog.csdn.net/hutuyaoniexi/article/details/80630687
周排行