张帅
侠客
侠客
  • UID323
  • 粉丝0
  • 关注0
  • 发帖数8
阅读:4520回复:0

以ant.jar中的方法打包文件夹为ZIP实例

楼主#
更多 发布于:2019-05-17 17:11
接上贴。
和上贴中发表的以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();
    }
}
游客

返回顶部