import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 压缩文件的工具类
*
*
*/
public class ZipFileUtil {
private static final Logger LOG = LoggerFactory.getLogger(ZipCompressorFileUtil.class);
/**
* 压缩单个文件
*
* @param filePath 需要压缩的文件
* @param zipPath 压缩后的文件
*/
public static void zipFile(String filePath, String zipPath) {
LOG.info("--开始压缩单个文件---filePath:{},zipPath{}", filePath, zipPath);
InputStream input = null;
ZipOutputStream zipOut = null;
try {
File file = new File(filePath);
File zipFile = new File(zipPath);
input = new FileInputStream(file);
zipOut = new ZipOutputStream(new FileOutputStream(zipFile));
zipOut.putNextEntry(new ZipEntry(file.getName()));
int temp = 0;
while ((temp = input.read()) != -1) {
zipOut.write(temp);
}
} catch (Exception e) {
LOG.error(e.getMessage(), e);
} finally {
IOUtils.closeQuietly(zipOut);
IOUtils.closeQuietly(input);
}
}
/**
* 一次性压缩多个文件,文件存放至一个文件夹中
*
* @param filePath 要压缩的文件夹
* @param zipPath 压缩后的文件夹
*/
public static void zipMultiFile(String filePath, String zipPath) {
LOG.info("--开始压缩文件夹下的多个文件---filePath:{},zipPath{}", filePath, zipPath);
ZipOutputStream zipOut = null;
InputStream input = null;
try {
File targetFile = new File(filePath);// 要被压缩的文件夹
File zipFile = new File(zipPath);
zipOut = new ZipOutputStream(new FileOutputStream(zipFile));
if (targetFile.isDirectory()) {
File[] files = targetFile.listFiles();
if (files != null && files.length > 0) {
for (File file : files) {
input = new FileInputStream(file);
zipOut.putNextEntry(new ZipEntry(file.getName() + File.separator + file.getName()));
int temp = 0;
while ((temp = input.read()) != -1) {
zipOut.write(temp);
}
}
}
}
} catch (Exception e) {
LOG.error(e.getMessage(), e);
} finally {
IOUtils.closeQuietly(input);
IOUtils.closeQuietly(zipOut);
}
}
/**
* 解压缩(解压缩单个文件)
*
* @param zipPath 要解压的压缩文件路径和压缩文件名
* @param outfilePath 解压后的路径和文件名
* @param fileName 要解压的文件名
*/
public static String zipContraFile(String zipPath, String outfilePath, String fileName) {
InputStream input = null;
OutputStream output = null;
ZipFile zipFile = null;
try {
File file = new File(zipPath);//压缩文件路径和文件名
File outFile = new File(outfilePath);//解压后路径和文件名
zipFile = new ZipFile(file);
ZipEntry entry = zipFile.getEntry(fileName);//要解压的文件名
input = zipFile.getInputStream(entry);
output = new FileOutputStream(outFile);
int temp = 0;
while ((temp = input.read()) != -1) {
output.write(temp);
}
} catch (Exception e) {
LOG.error(e.getMessage(), e);
} finally {
IOUtils.closeQuietly(input);
IOUtils.closeQuietly(output);
IOUtils.closeQuietly(zipFile);
}
return outfilePath;
}
/**
* 解压缩(压缩文件中包含多个文件)可代替上面的方法使用。
*/
public static void ZipContraMultiFile(String zippath, String outzippath) {
ZipFile zipFile = null;
ZipInputStream zipInput = null;
InputStream input = null;
OutputStream output = null;
try {
File file = new File(zippath);
File outFile = null;
zipFile = new ZipFile(file);
zipInput = new ZipInputStream(new FileInputStream(file));
ZipEntry entry = null;
while ((entry = zipInput.getNextEntry()) != null) {
LOG.info("解压缩" + entry.getName() + "文件");
outFile = new File(outzippath + File.separator + entry.getName());
if (!outFile.getParentFile().exists()) {
outFile.getParentFile().mkdir();
}
if (!outFile.exists()) {
outFile.createNewFile();
}
input = zipFile.getInputStream(entry);
output = new FileOutputStream(outFile);
int temp = 0;
while ((temp = input.read()) != -1) {
output.write(temp);
}
}
} catch (Exception e) {
LOG.error(e.getMessage(), e);
} finally {
IOUtils.closeQuietly(zipInput);
IOUtils.closeQuietly(zipFile);
IOUtils.closeQuietly(input);
IOUtils.closeQuietly(output);
}
}
文件zip压缩与解压
最新推荐文章于 2025-04-24 16:18:21 发布