一个zip文件可能是压缩一个或多个文件,对于每一个我们都需要创建一个ZipEntry对象并依次放进Zip文件中 import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; public class Zip { public static void main(String[] args) { File f=new File("GUI"); createZip(f+".zip",f); } private static void createZip(String obj, File f) { try { ZipOutputStream zop=new ZipOutputStream(new FileOutputStream(obj)); ZipInputStream zip=new ZipInputStream(new FileInputStream(obj)); ZipEntry ze=new ZipEntry(obj); zop.putNextEntry(ze); compressFile(zop,"",f); deCompressFile(zip,obj); zop.close(); zip.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private static void deCompressFile(ZipInputStream zip, String source) { try { ZipEntry en=null; while((en=zip.getNextEntry())!=null) { String obj=en.getName(); File file=new File(obj); File path=null; if(file.getParentFile().exists()) path=new File(file.getParentFile().getPath()); if(en.isDirectory()) { if(!file.exists()) file.mkdirs(); continue; } if(!path.exists()) { path.mkdirs(); } FileOutputStream out= new FileOutputStream(file); byte[] buf=new byte[1024]; int len; while((len=zip.read(buf))!=-1) { out.write(buf,0,len); } out.close(); } zip.closeEntry(); } catch (FileNotFoundException e) { } catch (IOException e) { e.printStackTrace(); } } private static void compressFile(ZipOutputStream zop, String dir,File f) throws IOException { if(f.exists()) { if(f.isDirectory()) { File[] files=f.listFiles(); dir=dir+(dir.length()==0?"":"/")+f.getName(); for(File file:files) { compressFile(zop,dir,file); } } else { InputStream is = new BufferedInputStream(new FileInputStream(f)); int readLen = -1; byte[] buf=new byte[1024]; while ((readLen = is.read(buf)) != -1) { zop.write(buf, 0, readLen); } is.close(); } } } } |
|