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)); // 添加對應(yīng)的文件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)文章
IDEA項目使用SpringBoot+MyBatis-Plus的方法
這篇文章主要介紹了IDEA項目使用SpringBoot+MyBatis-Plus的方法,本文分步驟通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10java實現(xiàn)圖片角度旋轉(zhuǎn)并獲得圖片信息
這篇文章主要為大家詳細介紹了java實現(xiàn)圖片角度旋轉(zhuǎn)并獲得圖片信息,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-02-02利用java實現(xiàn)一個客戶信息管理系統(tǒng)
這篇文章主要給大家介紹了關(guān)于利用java實現(xiàn)一個客戶信息管理系統(tǒng)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Java 中 String,StringBuffer 和 StringBuilder 的區(qū)別及用法
這篇文章主要介紹了Java 中 String,StringBuffer 和 StringBuilder 的區(qū)別及用法的相關(guān)資料,需要的朋友可以參考下2017-03-03SpringBoot如何優(yōu)雅實現(xiàn)接口參數(shù)驗證
為了保證參數(shù)的正確性,我們需要使用參數(shù)驗證機制,來檢測并處理傳入的參數(shù)格式是否符合規(guī)范,所以本文就來和大家聊聊如何優(yōu)雅實現(xiàn)接口參數(shù)驗證吧2023-08-08