最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java壓縮文件工具類ZipUtil使用方法代碼示例

 更新時間:2017年11月29日 10:50:46   作者:mao2080  
這篇文章主要介紹了Java壓縮文件工具類ZipUtil使用方法代碼示例,具有一定借鑒價值,需要的朋友可以參考下。

本文實例通過Java的Zip輸入輸出流實現(xiàn)壓縮和解壓文件,前一部分代碼實現(xiàn)獲取文件路徑,壓縮文件名的更改等,具體如下:

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輸入輸出流實現(xiàn)壓縮和解壓文件
 * 
 * @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()) {
						// 創(chuàng)建文件父目錄
						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流工具類實現(xiàn)關(guān)閉一個或多個流對象的Java語言描述,獲取可關(guān)閉的流對象列表,具體如下:

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

總結(jié)

以上就是本文關(guān)于Java壓縮文件工具類ZipUtil使用方法代碼示例的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。

相關(guān)文章

  • JAVA多線程的使用場景與注意事項總結(jié)

    JAVA多線程的使用場景與注意事項總結(jié)

    這篇文章主要給大家介紹了關(guān)于JAVA多線程的使用場景與注意事項的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • mybatis?xml文件熱加載實現(xiàn)示例詳解

    mybatis?xml文件熱加載實現(xiàn)示例詳解

    這篇文章主要為大家介紹了mybatis?xml文件熱加載實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • SpringBoot如何通過Map實現(xiàn)策略模式

    SpringBoot如何通過Map實現(xiàn)策略模式

    策略模式是一種行為設(shè)計模式,它允許在運行時選擇算法的行為,在Spring框架中,我們可以利用@Resource注解和Map集合來優(yōu)雅地實現(xiàn)策略模式,這篇文章主要介紹了SpringBoot如何通過Map實現(xiàn)策略模式,需要的朋友可以參考下
    2025-03-03
  • java 導入Excel思路及代碼示例

    java 導入Excel思路及代碼示例

    這篇文章主要介紹了java 導入Excel思路及代碼示例,簡要分析了設(shè)計思路,然后分享了實例代碼,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Java結(jié)構(gòu)型設(shè)計模式中代理模式示例詳解

    Java結(jié)構(gòu)型設(shè)計模式中代理模式示例詳解

    代理模式(Proxy Parttern)為一個對象提供一個替身,來控制這個對象的訪問,即通過代理對象來訪問目標對象。本文將通過示例詳細講解一下這個模式,需要的可以參考一下
    2022-09-09
  • Java中的線程死鎖是什么?如何避免?

    Java中的線程死鎖是什么?如何避免?

    這篇文章主要介紹了Java中線程死鎖的相關(guān)資料,以及避免死鎖的方法,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-09-09
  • 詳解HDFS多文件Join操作的實例

    詳解HDFS多文件Join操作的實例

    這篇文章主要介紹了詳解HDFS多文件Join操作的實例的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • java 集合并發(fā)操作出現(xiàn)的異常ConcurrentModificationException

    java 集合并發(fā)操作出現(xiàn)的異常ConcurrentModificationException

    Map在遍歷時候通常 現(xiàn)獲得其鍵值的集合Set,然后用迭代器Iterator來對Map進行遍歷。
    2009-06-06
  • Java線程實現(xiàn)的兩種方式解析

    Java線程實現(xiàn)的兩種方式解析

    這篇文章主要介紹了Java線程實現(xiàn)的兩種方式解析,注意在構(gòu)造器中啟動這個線程的話,很容易造成this逃逸的問題,這是要注意的,這是通過直接集成thread來成為線程,同時在這種情況下,你可以通過調(diào)用合適的方法來,需要的朋友可以參考下
    2024-01-01
  • jmeter中json提取器如何提取多個參數(shù)值

    jmeter中json提取器如何提取多個參數(shù)值

    關(guān)于jmeter中的正則表達式及json提取器可以提取響應值,但是實際可以需要上個接口的多個響應值,本文就詳細的介紹一下如何使用,感興趣的可以了解一下
    2021-11-11

最新評論

宽城| 江达县| 滦平县| 精河县| 旬阳县| 永善县| 商城县| 峨山| 图们市| 浪卡子县| 上高县| 通州区| 舟山市| 建水县| 密云县| 馆陶县| 武义县| 望城县| 铜梁县| 井研县| 保康县| 湛江市| 西安市| 望谟县| 吴旗县| 益阳市| 五莲县| 阿拉善左旗| 咸阳市| 蓬安县| 武陟县| 苏尼特左旗| 渝中区| 香格里拉县| 礼泉县| 安陆市| 吉林省| 独山县| 宜阳县| 深泽县| 凭祥市|