see java.util.zip(?)
it can deal with zip, gzip format
compress or decompress
good luck!

解决方案 »

  1.   

    gzip格式很简单,在输出或输入流中嵌套gzip的IO类即可,例如在输出流中:PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(new BufferedOutputStream(new GZIPOutputStream(new FileOutputStream(s_out_file,true)))))); zip格式稍微麻烦一些,因为它支持多个文件。压缩的代码如下:
    /*
    Use: java ZipFiles zipFileName file1 file2 file3 file4 ...
    */
    import java.io.*;
    import java.util.*;
    import java.util.zip.*;public class ZipFiles
    {
    public static void main(String[] args)
    {
    int i=0;
    if((args.length<2)||(args.length>20))
    {
    System.out.println("Use: java ZipFiles zipFileName file1 file2 file3 file4 ...");
    System.out.println("files number can not be larger than 20!");
    System.exit(0);
    }

    //取得待压缩的文件名
    String s_zipName=args[0];
    String[] s_files_will_be_ziped=new String[20];
    int i_count_will_be_ziped_files=args.length-1;
    for(i=1;i<args.length;i++)
    {
    s_files_will_be_ziped[i-1]=args[i];
    }

    //print
    System.out.println("below files will be ziped!");
    for(i=0;i<i_count_will_be_ziped_files;i++)
    System.out.println("file---->"+s_files_will_be_ziped[i]);

    //压缩
    System.out.println("compressing... ... ...");
    System.out.println("compressed "+zip_files(s_files_will_be_ziped,i_count_will_be_ziped_files,s_zipName)+" files");

    } //end main



    /* method zip_files() :  version 1.2  2001/07/05  */
    static int zip_files(String[] s_temp,int i_count_files,String s_ziped_fileName)
    {
    String s_current_path_fileName="";
    String s_current_fileName="";
    String[] s_fileNames=new String[100];
    byte[] buffer=new byte[1024];
    int bytesRead=0;
    int i=0;

    //先做一些校验工作----------------------------------------
    try
    {
    if((i_count_files<=0)||(i_count_files>99)||(!(s_ziped_fileName.endsWith(".zip"))))
    return 0;
    int j=0;
    for(i=0;i<i_count_files;i++)
    {
    File f_test=new File(s_temp[i]);
    if(f_test.isFile())
    {
    s_fileNames[j]=s_temp[i];
    j++;
    }
    }
    i_count_files=j;
    }
    catch(Exception ee_345)
    {
    return 0;
    }

    //正式开始压缩--------------------------------------------
    try
    {
    ZipOutputStream zip=new ZipOutputStream(new FileOutputStream(s_ziped_fileName));

    for(i=0;i<i_count_files;i++)
    {
    s_current_path_fileName=s_fileNames[i];
    FileInputStream in=new FileInputStream(s_current_path_fileName);
    File f_ttt=new File(s_current_path_fileName);
    s_current_fileName=f_ttt.getName();
    ZipEntry entry=new ZipEntry(s_current_fileName); 
    zip.putNextEntry(entry);
    while((bytesRead=in.read(buffer))!=-1)
    zip.write(buffer,0,bytesRead);
    in.close();
    } //end for
    zip.close();
    return i_count_files;
    }
    catch(Exception ex)
    {
    //System.out.println(ex);
    return 0;
    }
    } //end zip_files()


    } //end class ZipFiles