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

