apache ant 解压缩zip
程序员文章站
2022-06-22 09:42:02
...
使用apache ant.tools.zip来打包和解压缩。
package zip;
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; 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.io.OutputStream; import java.util.Enumeration; import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream; import org.apache.commons.compress.utils.IOUtils; import org.apache.tools.ant.util.FileUtils; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.apache.tools.zip.ZipOutputStream; /** * * @author Administrator cph * */ public class ZipUtils { ZipFile zipFile = null; ZipEntry zipEntry = null; File temp = null; private OutputStream out = null; private BufferedOutputStream bos = null; private ZipOutputStream zos = null; /** * * @param zipName 需要解压的文件 * @param zipPath 解压存储路径 * @throws Exception */ public void unZip(String zipName,String zipPath) throws Exception{ FileOutputStream fos; InputStream is; String path1 = ""; String tempPath = ""; if(!new File(zipPath).exists()){ new File(zipPath).mkdir(); } zipFile = new ZipFile(zipName); temp = new File(zipPath); String strPath = temp.getAbsolutePath(); Enumeration<Object> enu = zipFile.getEntries(); while(enu.hasMoreElements()){ zipEntry = (ZipEntry) enu.nextElement(); path1 = zipEntry.getName(); if(zipEntry.isDirectory()){ tempPath = strPath+File.separator+path1; File dir = new File(tempPath); dir.mkdirs(); continue; } else{ is = zipFile.getInputStream(zipEntry); BufferedInputStream bis = new BufferedInputStream(is); path1 = zipEntry.getName(); tempPath = strPath+File.separator+path1; String subdirtemp = path1; for(int i=0;i<subdirtemp.length();i++){ if(subdirtemp.substring(i, i+1).equalsIgnoreCase("\\")){ String tempstr = strPath+File.separator+subdirtemp.substring(0,i); File subdir = new File(tempstr); if(!subdir.exists()){ subdir.mkdir(); } } } fos = new FileOutputStream(tempPath); BufferedOutputStream bos = new BufferedOutputStream(fos); // int c ; // while((c = bis.read())!=-1){ // bos.write(c); // } IOUtils.copy(bis, bos); bis.close(); bos.close(); } } } public void close() throws IOException{ this.zos.flush(); this.zos.close(); this.bos.flush(); this.bos.close(); this.out.flush(); this.out.close(); } /** * * @param zipfileName 打包后文件的名称,含路径 * @param filePath 需要打包的文件夹或者文件的路径 * @param pathName 打包到pathName文件夹下 * @throws Exception */ public void doZip(String zipfileName,String filePath,String pathName) throws Exception{ File f = new File(zipfileName); this.out = new FileOutputStream(f); this.bos = new BufferedOutputStream(out); this.zos = new ZipOutputStream(bos); this.zos.setEncoding("GBK"); File file = new File(filePath); if (!"".equals(pathName) && null != pathName) { pathName = pathName + File.separator; } else { pathName = f.getName().substring(0, f.getName().length() - 4) + File.separator; } doZip(zos,filePath,pathName); close(); } private void doZip(ZipOutputStream zos, String file, String pathName) throws IOException { File file2zip = new File(file); if (file2zip.isFile()) { zos.putNextEntry(new ZipEntry(pathName + file2zip.getName())); IOUtils.copy(new FileInputStream(file2zip.getAbsolutePath()), zos); zos.closeEntry(); } else { File[] files = file2zip.listFiles(); if (files.length < 1 || files == null) { return; } else { for (File f : files) { if (f.isDirectory()) { doZip(zos, f.getAbsolutePath(), pathName+f.getName()+File.separator); } else { zos.putNextEntry(new ZipEntry(pathName + f.getName())); IOUtils.copy(new FileInputStream(f.getAbsolutePath()), zos); zos.closeEntry(); } } } } } public static void main(String[] args) throws Exception { ZipUtils tzp = new ZipUtils(); // tzp.doZip("c:/aaab.zip", "d:/a/111.ppt", ""); tzp.unZip("c:\\aaab.zip", "d:\\abc\\"); } }