有谁用过java.util.zip?能用它来任意读写zip文件吗? 比如一个zip文件含有3个文件,要修改第二个文件,行吗?偶看了看API,好像不行。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 /**TestZip.javacoding by Serol Luo.[email protected]2003/07/03http://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);}}} 一个用java.util.zip创建和读取zip文件的类,供参考 谢谢yexin218!偶另外有办法了 [*] 如何修改jar包里的文件? 多线程问题 请问http://aa.jsp?a=1&b=2或者servlet跟webservice调用有什么区别 请个问大哥帮小弟解开这个疑惑,感激不尽 请问java查询SQLServer数据库的问题 那里有错了,请指点,谢谢! 请问什么叫类的引用? 如何让一个字符串换行????谢谢!!! 使用MD5加密后的两个相同字符串,为什么比较却不等? 百分请教高手j2sdk问题 现有系统内容、公告、系统均为手动管理! O'REILLY关于JAVA四个包的书名字是什么
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);}
}
}