亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中如何使用ZipUtil壓縮文件工具類

發布時間:2021-07-22 16:53:57 來源:億速云 閱讀:826 作者:Leah 欄目:編程語言

這篇文章給大家介紹Java中如何使用ZipUtil壓縮文件工具類,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

具體如下:

package com.utility.zip;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import com.utility.io.IOUtil;
/**
 * 通過Java的Zip輸入輸出流實現壓縮和解壓文件
 * 
 * @author liujiduo
 * 
 */
public final class ZipUtil {
	private ZipUtil() {
		// empty
	}
	/**
   * 壓縮文件
   * 
   * @param filePath
   *      待壓縮的文件路徑
   * @return 壓縮后的文件
   */
	public static File zip(String filePath) {
		File target = null;
		File source = new File(filePath);
		if (source.exists()) {
			// 壓縮文件名=源文件名.zip
			String zipName = source.getName() + ".zip";
			target = new File(source.getParent(), zipName);
			if (target.exists()) {
				target.delete();
				// 刪除舊的文件
			}
			FileOutputStream fos = null;
			ZipOutputStream zos = null;
			try {
				fos = new FileOutputStream(target);
				zos = new ZipOutputStream(new BufferedOutputStream(fos));
				// 添加對應的文件Entry
				addEntry("/", source, zos);
			}
			catch (IOException e) {
				throw new RuntimeException(e);
			}
			finally {
				IOUtil.closeQuietly(zos, fos);
			}
		}
		return target;
	}
	/**
   * 掃描添加文件Entry
   * 
   * @param base
   *      基路徑
   * 
   * @param source
   *      源文件
   * @param zos
   *      Zip文件輸出流
   * @throws IOException
   */
	private static void addEntry(String base, File source, ZipOutputStream zos)
	      throws IOException {
		// 按目錄分級,形如:/aaa/bbb.txt
		String entry = base + source.getName();
		if (source.isDirectory()) {
			for (File file : source.listFiles()) {
				// 遞歸列出目錄下的所有文件,添加文件Entry
				addEntry(entry + "/", file, zos);
			}
		} else {
			FileInputStream fis = null;
			BufferedInputStream bis = null;
			try {
				byte[] buffer = new byte[1024 * 10];
				fis = new FileInputStream(source);
				bis = new BufferedInputStream(fis, buffer.length);
				int read = 0;
				zos.putNextEntry(new ZipEntry(entry));
				while ((read = bis.read(buffer, 0, buffer.length)) != -1) {
					zos.write(buffer, 0, read);
				}
				zos.closeEntry();
			}
			finally {
				IOUtil.closeQuietly(bis, fis);
			}
		}
	}
	/**
   * 解壓文件
   * 
   * @param filePath
   *      壓縮文件路徑
   */
	public static void unzip(String filePath) {
		File source = new File(filePath);
		if (source.exists()) {
			ZipInputStream zis = null;
			BufferedOutputStream bos = null;
			try {
				zis = new ZipInputStream(new FileInputStream(source));
				ZipEntry entry = null;
				while ((entry = zis.getNextEntry()) != null
				            && !entry.isDirectory()) {
					File target = new File(source.getParent(), entry.getName());
					if (!target.getParentFile().exists()) {
						// 創建文件父目錄
						target.getParentFile().mkdirs();
					}
					// 寫入文件
					bos = new BufferedOutputStream(new FileOutputStream(target));
					int read = 0;
					byte[] buffer = new byte[1024 * 10];
					while ((read = zis.read(buffer, 0, buffer.length)) != -1) {
						bos.write(buffer, 0, read);
					}
					bos.flush();
				}
				zis.closeEntry();
			}
			catch (IOException e) {
				throw new RuntimeException(e);
			}
			finally {
				IOUtil.closeQuietly(zis, bos);
			}
		}
	}
	public static void main(String[] args) {
		String targetPath = "E:\\Win7壁紙";
		File file = ZipUtil.zip(targetPath);
		System.out.println(file);
		ZipUtil.unzip("F:\\Win7壁紙.zip");
	}
}

下面是通過IO流工具類實現關閉一個或多個流對象的Java語言描述,獲取可關閉的流對象列表,具體如下:

package com.utility.io;
import java.io.Closeable;
import java.io.IOException;
/**
 * IO流工具類
 * 
 * @author liujiduo
 * 
 */
public class IOUtil {
	/**
   * 關閉一個或多個流對象
   * 
   * @param closeables
   *      可關閉的流對象列表
   * @throws IOException
   */
	public static void close(Closeable... closeables) throws IOException {
		if (closeables != null) {
			for (Closeable closeable : closeables) {
				if (closeable != null) {
					closeable.close();
				}
			}
		}
	}
	/**
   * 關閉一個或多個流對象
   * 
   * @param closeables
   *      可關閉的流對象列表
   */
	public static void closeQuietly(Closeable... closeables) {
		try {
			close(closeables);
		}
		catch (IOException e) {
			// do nothing
		}
	}
}

關于Java中如何使用ZipUtil壓縮文件工具類就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

马尔康县| 白朗县| 宜兴市| 石首市| 五河县| 霍山县| 博湖县| 新闻| 济南市| 清水河县| 拉萨市| 法库县| 温宿县| 方山县| 洪江市| 谢通门县| 威宁| 孙吴县| 平度市| 社旗县| 吴川市| 永宁县| 清水河县| 临猗县| 苏尼特右旗| 洮南市| 兴山县| 汤阴县| 巴彦淖尔市| 汝南县| 五大连池市| 仙居县| 紫阳县| 新野县| 申扎县| 石阡县| 孝感市| 罗城| 武夷山市| 宣武区| 乌兰察布市|