阅读:4520回复:0
以ant.jar中的方法打包文件夹为ZIP实例
接上贴。
和上贴中发表的以JDK自带的方法打包有一下区别。 1. jdk自带的使用复杂麻烦。但是有一个优势为其允许在打包过程中读取打包文件中的内容,也就是说,可以边读边打包。这种方法可以应对比较复杂的需求场景,比如,在打包时,需要获取其中某文件的内容并持久化。 2. ant.jar打包时更加方便,使用简单。但是其不允许边读边打包。 一下为实例,调用compressedFile(String,String,String)即可 需要ant.jar支持。 /** * @param resourcesPath * 源文件路径 * @param targetPath * 输出路径 * @param fileName * 输出后的文件名 * @throws Exception */ public void compressedFile(String resourcesPath,String targetPath,String targetName) throws Exception{ System.out.println("resourcesPath:"+resourcesPath); System.out.println("targetPath:"+targetPath); File targetFile = new File(targetPath); //目的 File resourcesFile = new File(resourcesPath); //源文件 if(!targetFile.exists()){ targetFile.mkdirs(); } System.out.println("要生成的zip:"+targetPath+targetName+".zip"); FileOutputStream outputStream = new FileOutputStream(targetPath+targetName+".zip"); ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(outputStream)); createCompressedFile(out, resourcesFile, ""); out.close(); } public void createCompressedFile(ZipOutputStream out,File file,String dir) throws Exception{ //如果当前的是文件夹,则进行进一步处理 if(file.isDirectory()){ //得到文件列表信息 File[] files = file.listFiles(); //将文件夹添加到下一级打包目录 out.putNextEntry(new ZipEntry(dir+"/")); dir = dir.length() == 0 ? "" : dir +"/"; //循环将文件夹中的文件打包 for(inti = 0 ; i < files.length ; i++){ createCompressedFile(out, files, dir + files.getName()); //递归处理 } }else{ //当前的是文件,打包处理 FileInputStream fis = new FileInputStream(file); out.putNextEntry(new ZipEntry(dir)); intj = 0; byte[] buffer = newbyte[1024]; while((j = fis.read(buffer)) > 0){ out.write(buffer,0,j); } fis.close(); } } |
|