天天看點

java實作zip壓縮、解壓

/**
	 * 解壓縮
	 * @param warPath 包位址
	 * @param unzipPath 解壓後位址
	 */
	public static void unzip(String warPath, String unzipPath) {
		File warFile = new File(warPath);
		try {
			//獲得輸出流
			BufferedInputStream bufferedInputStream = new BufferedInputStream(
					new FileInputStream(warFile));
			ArchiveInputStream in = new ArchiveStreamFactory()
					.createArchiveInputStream(ArchiveStreamFactory.JAR,
							bufferedInputStream);
			JarArchiveEntry entry = null;
			//循環周遊解壓
			while ((entry = (JarArchiveEntry) in.getNextEntry()) != null) {
				if (entry.isDirectory()) {
					new File(unzipPath, entry.getName()).mkdir();
				} else {
					OutputStream out = FileUtils.openOutputStream(new File(
							unzipPath, entry.getName()));
					IOUtils.copy(in, out);
					out.close();
				}
			}
			in.close();
		} catch (FileNotFoundException e) {
			System.err.println("未找到war檔案");
		} catch (ArchiveException e) {
			System.err.println("不支援的壓縮格式");
		} catch (IOException e) {
			System.err.println("檔案寫入發生錯誤");
		}
	}
	/**
	 * 壓縮 
	 * @param destFile 建立的位址及名稱
	 * @param zipDir 要打包的目錄
	 */
	public static void zip(String destFile, String zipDir) {
		File outFile = new File(destFile);
		try {
			outFile.createNewFile();
			//建立檔案
			BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(
					new FileOutputStream(outFile));
			ArchiveOutputStream out = new ArchiveStreamFactory()
					.createArchiveOutputStream(ArchiveStreamFactory.JAR,
							bufferedOutputStream);
			if (zipDir.charAt(zipDir.length() - 1) != '/') {
				zipDir += '/';
			}

			Iterator<File> files = FileUtils.iterateFiles(new File(zipDir),
					null, true);
			while (files.hasNext()) {
				File file = files.next();
				ZipArchiveEntry zipArchiveEntry = new ZipArchiveEntry(file,
						file.getPath().replace(zipDir.replace("/", "\\"), ""));
				out.putArchiveEntry(zipArchiveEntry);
				IOUtils.copy(new FileInputStream(file), out);
				out.closeArchiveEntry();
			}
			out.finish();
			out.close();
		} catch (IOException e) {
			System.err.println("建立檔案失敗");
		} catch (ArchiveException e) {
			System.err.println("不支援的壓縮格式");
		}
	}
	
	public static void main(String[] args) {
//		WarUtils.unzip("g:\\data.war", "g:\\data");
		WarUtils.zip("g:\\cba.war", "g:\\data");
	}
           

需要用到commons-io-2.0.1.jar  commons-compress-1.5.jar

  • commons-io-2.0.1.jar (155.8 KB)
  • 下載下傳次數: 135
  • commons-compress-1.5.jar (250.2 KB)
  • 下載下傳次數: 168