比如一个zip文件含有3个文件,要修改第二个文件,行吗?
偶看了看API,好像不行。

解决方案 »

  1.   

    /**
    TestZip.java
    coding by Serol Luo.
    [email protected]
    2003/07/03
    http://www.chinaunix.net/forum/viewforum.php?f=26
    转载请保留此信息
    */
    import java.util.*;
    import java.util.zip.*;
    import java.io.*;
    class TestZip
    {
    public void zip(String zipFileName,String inputFile)throws Exception{
    zip(zipFileName,new File(inputFile));
    }
    public void zip(String zipFileName,File inputFile)throws Exception{
    ZipOutputStream out=new ZipOutputStream(new FileOutputStream(zipFileName));
    zip(out,inputFile,"");
    System.out.println("zip done");
    out.close();
    }public void unzip(String zipFileName,String outputDirectory)throws Exception{
    ZipInputStream in=new ZipInputStream(new FileInputStream(zipFileName));
    ZipEntry z;
    while ((z=in.getNextEntry() )!= null)
    {
    System.out.println("unziping "+z.getName());
    if (z.isDirectory())
    {
    String name=z.getName();
    name=name.substring(0,name.length()-1);
    File f=new File(outputDirectory+File.separator+name);
    f.mkdir();
    System.out.println("mkdir "+outputDirectory+File.separator+name);
    }
    else{
    File f=new File(outputDirectory+File.separator+z.getName());
    f.createNewFile();
    FileOutputStream out=new FileOutputStream(f);
    int b;
    while ((b=in.read()) != -1)
    out.write(b);
    out.close();
    }
    }in.close();
    }public void zip(ZipOutputStream out,File f,String base)throws Exception{
    System.out.println("Zipping "+f.getName());
    if (f.isDirectory())
    {
    File[] fl=f.listFiles();
    out.putNextEntry(new ZipEntry(base+"/"));
    base=base.length()==0?"":base+"/";
    for (int i=0;i<fl.length ;i++ )
    {
    zip(out,fl[i],base+fl[i].getName());
    }
    }
    else
    {
    out.putNextEntry(new ZipEntry(base));
    FileInputStream in=new FileInputStream(f);
    int b;
    while ((b=in.read()) != -1)
    out.write(b);
    in.close();
    }}
    public static void main(String[] args)
    {
    try{
    TestZip t=new TestZip();
    t.zip("c:\test.zip","c:\test");
    t.unzip("c:\test.zip","c:\test2");
    }
    catch(Exception e){e.printStackTrace(System.out);}
    }
    }
      

  2.   

    一个用java.util.zip创建和读取zip文件的类,供参考
      

  3.   

    谢谢yexin218!偶另外有办法了