低版本JDK适用的apache zip压缩示例代码

网上apache zip 示例代码如过江之鲫,不过基本都是支持FOR-EACH写法的高版本JDK,我这里写一个JDK1.4版本的用法,并附带了main调试。其实也没有啥大区别,大家都写的出。


import java.io.*; 
import org.apache.tools.zip.*; 
import java.util.Enumeration; 

 public class ZipUtil {
    private static ZipFile         zipFile; 
    private static ZipOutputStream zipOut;     //压缩Zip 
    private static ZipEntry        zipEntry; 
    private static int      bufSize;    //size of bytes 
    private static byte[]          buf; 
    private static int             readedBytes; 
    
	public static void doZip(String zipDirectory){//zipDirectoryPath:需要压缩的文件夹名 
        File file; 
        File zipDir; 

        zipDir = new File(zipDirectory); 
        
        String zipFileName = zipDirectory+ ".zip";//压缩后生成的zip文件名 
        File todelfile = new File(zipFileName);
        if(todelfile.exists()){
         todelfile.delete();
        }

        try{ 
            zipOut = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFileName))); 
            zipOut.setEncoding("gbk");
            //防止文件名乱码
            handleDir(zipDir , zipOut); 
            System.out.println("zipfilename"+zipFileName);
            zipOut.close(); 
        }catch(IOException ioe){ 
            ioe.printStackTrace(); 
        } 
    } 

    //由doZip调用,递归完成目录文件读取 
    private static void handleDir(File dir , ZipOutputStream zipOut)throws IOException{ 
        InputStream fileIn; 
        File[] files; 

        files = dir.listFiles(); 
     
        if(files.length == 0){//如果目录为空,则单独创建之. 
            //ZipEntry的isDirectory()方法中,目录以"/"结尾. 
            zipOut.putNextEntry(new ZipEntry(dir.toString() + "/")); 
            zipOut.closeEntry(); 
        } 
        else{//如果目录不为空,则分别处理目录和文件. 
        	for(int i=0;i<files.length;i++){
        		File fileName=files[i];
                 
            	
                if(fileName.isDirectory()){ 
                    handleDir(fileName , zipOut); 
                } 
                else{ 
                	System.out.println(fileName);
                	if(!fileName.getName().endsWith("PDF")) continue;
                    fileIn = new FileInputStream(fileName); 
                    //zipOut.putNextEntry(new ZipEntry(fileName.toString())); 
                    //上面方法,会在zip包中包含整个文件夹结构
                    //下面方法,仅放进文件,不包含文件夹结构
                    zipOut.putNextEntry(new ZipEntry(fileName.getName())); 
                    while((readedBytes = fileIn.read())>0){ 
                        zipOut.write( readedBytes); 
                    } 

                    zipOut.closeEntry(); 
                } 
            } 
        } 
    } 
    public static void main(String[] args){
    	
    	doZip("F:\\test\\test");
    }
}

另外,1.4jdk不能用高版本的ant.jar,得去

https://archive.apache.org/dist/ant/binaries/

下载 

apache-ant-1.7.1-bin.zip

猜你喜欢

转载自blog.csdn.net/nutria123/article/details/81123981
今日推荐