Java将文件分割为多个子文件再将子文件合并成原始文件的示例
Java将文件分割为多个子文件再将子文件合并成原始文件的示例,废话不多说,代码如下:
importjava.io.File; importjava.io.InputStream; importjava.io.FileInputStream; importjava.io.OutputStream; importjava.io.FileOutputStream; importjava.util.Properties; importjava.util.Iterator; importjava.util.TreeSet; importjava.util.Set; publicclassTest { publicstaticvoidmain(String[]args)throwsException { /* *将一个文件分割为多个文件,然后再组合成一个文件 *找到文件,读入一个1M的buffer中,然后写入一个Part文件中,循环此操作直到文件读取完毕 */ StringsourceFilePath="D:"+File.separator+"Code"+File.separator+"source"+File.separator+"031316_【第13章:Java类集】_属性类:Properties.wmv"; intpartFileLength=1024*1024;//指定分割的子文件大小为1M splitFile(sourceFilePath,partFileLength);//将文件分割 combineFile("D:"+File.separator+"Code"+File.separator+"target");//将分割后的文件合并 } publicstaticvoidcombineFile(StringdirectoryPath)throwsException { Propertiesconfig=newProperties(); InputStreamips=null; ips=newFileInputStream(newFile(directoryPath+File.separator+"config.properties")); config.load(ips); SetkeySet=config.keySet();//需要将keySet转换为int型 //将keySet迭代出来,转换成int类型的set,排序后存储进去 Set<Integer>intSet=newTreeSet<Integer>(); IteratoriterString=keySet.iterator(); while(iterString.hasNext()) { StringtempKey=(String)iterString.next(); if("name".equals(tempKey)) {} else { inttempInt; tempInt=Integer.parseInt(tempKey); intSet.add(tempInt); } } Set<Integer>sortedKeySet=newTreeSet<Integer>(); sortedKeySet.addAll(intSet); OutputStreameachFileOutput=null; eachFileOutput=newFileOutputStream(newFile("D:"+File.separator+"Code"+File.separator+config.getProperty("name"))); Iteratoriter=sortedKeySet.iterator(); while(iter.hasNext()) { Stringkey=newString(""+iter.next()); if(key.equals("name")) {} else { //System.out.println("debug---"); StringfileNumber=null; StringfilePath=null; fileNumber=key; filePath=config.getProperty(fileNumber); //循环读取文件-->依次写入 InputStreameachFileInput=null; eachFileInput=newFileInputStream(newFile(filePath)); byte[]buffer=newbyte[1024*1024*1];//缓冲区文件大小为1M intlen=0; while((len=eachFileInput.read(buffer,0,1024*1024*1))!=-1) { eachFileOutput.write(buffer,0,len); } eachFileInput.close(); } } eachFileOutput.close(); } publicstaticvoidsplitFile(StringsourceFilePath,intpartFileLength)throwsException { FilesourceFile=null; FiletargetFile=null; InputStreamips=null; OutputStreamops=null; OutputStreamconfigOps=null;//该文件流用于存储文件分割后的相关信息,包括分割后的每个子文件的编号和路径,以及未分割前文件名 PropertiespartInfo=null;//properties用于存储文件分割的信息 byte[]buffer=null; intpartNumber=1; sourceFile=newFile(sourceFilePath);//待分割文件 ips=newFileInputStream(sourceFile);//找到读取源文件并获取输入流 configOps=newFileOutputStream(newFile("D:"+File.separator+"Code"//配置文件 +File.separator+"target"+File.separator+"config.properties")); buffer=newbyte[partFileLength];//开辟缓存空间 inttempLength=0; partInfo=newProperties();//key:1开始自动编号value:文件路径 while((tempLength=ips.read(buffer,0,partFileLength))!=-1) { StringtargetFilePath="D:"+File.separator+"Code" +File.separator+"target"+File.separator+"part_"+(partNumber);//分割后的文件路径+文件名 partInfo.setProperty((partNumber++)+"",targetFilePath);//将相关信息存储进properties targetFile=newFile(targetFilePath); ops=newFileOutputStream(targetFile);//分割后文件 ops.write(buffer,0,tempLength);//将信息写入碎片文件 ops.close();//关闭碎片文件 } partInfo.setProperty("name",sourceFile.getName());//存储源文件名 partInfo.store(configOps,"ConfigFile");//将properties存储进实体文件中 ips.close();//关闭源文件流 } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。