Java处理压缩文件
简介
在日常开发中,我们经常会遇到需要处理压缩文件的情况。压缩文件可以节省文件存储空间,提高文件传输效率。Java提供了丰富的压缩文件处理库,使得我们可以轻松地进行压缩和解压缩操作。本文将介绍Java中处理压缩文件的常用方式,并提供相应的代码示例。
压缩文件的概念
压缩文件是指通过对一个或多个文件或文件夹进行压缩处理,使其占用的磁盘空间减小的文件。常见的压缩文件格式有ZIP、GZIP、TAR等。
Java处理ZIP文件
ZIP是一种常见的压缩文件格式,Java提供了java.util.zip
包来处理ZIP文件。下面是一个处理ZIP文件的示例代码:
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;
public class ZipUtils {
public static void zipFile(File fileToZip, String zipFileName) throws IOException {
try (FileOutputStream fos = new FileOutputStream(zipFileName);
ZipOutputStream zos = new ZipOutputStream(fos);
FileInputStream fis = new FileInputStream(fileToZip)) {
ZipEntry zipEntry = new ZipEntry(fileToZip.getName());
zos.putNextEntry(zipEntry);
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) >= 0) {
zos.write(buffer, 0, length);
}
zos.closeEntry();
}
}
public static void unzipFile(String zipFileName, String destDirectory) throws IOException {
File destDir = new File(destDirectory);
if (!destDir.exists()) {
destDir.mkdir();
}
try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFileName))) {
ZipEntry zipEntry = zis.getNextEntry();
while (zipEntry != null) {
String fileName = zipEntry.getName();
File newFile = new File(destDirectory + File.separator + fileName);
new File(newFile.getParent()).mkdirs();
try (FileOutputStream fos = new FileOutputStream(newFile)) {
byte[] buffer = new byte[1024];
int length;
while ((length = zis.read(buffer)) >= 0) {
fos.write(buffer, 0, length);
}
}
zipEntry = zis.getNextEntry();
}
}
}
}
上述代码中,zipFile
方法用于将指定的文件压缩为一个ZIP文件,参数fileToZip
为待压缩的文件,zipFileName
为压缩后的ZIP文件名。unzipFile
方法用于解压缩指定的ZIP文件,参数zipFileName
为待解压缩的ZIP文件名,destDirectory
为解压缩后的目标目录。
Java处理GZIP文件
GZIP是一种常见的压缩文件格式,Java提供了java.util.zip
包来处理GZIP文件。下面是一个处理GZIP文件的示例代码:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
public class GzipUtils {
public static void gzipFile(File fileToGzip, String gzipFileName) throws IOException {
try (FileInputStream fis = new FileInputStream(fileToGzip);
FileOutputStream fos = new FileOutputStream(gzipFileName);
GZIPOutputStream gzipOS = new GZIPOutputStream(fos)) {
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) >= 0) {
gzipOS.write(buffer, 0, length);
}
}
}
public static void gunzipFile(String gzipFileName, String targetFileName) throws IOException {
try (FileInputStream fis = new FileInputStream(gzipFileName);
GZIPInputStream gzipIS = new GZIPInputStream(fis);
FileOutputStream fos = new FileOutputStream(targetFileName)) {
byte[] buffer = new byte[1024];
int length;
while ((length = gzipIS.read(buffer)) >= 0) {
fos.write(buffer, 0, length);
}
}
}
}
上述代码中,gzipFile
方法用于将指定的文件压缩为一个GZIP文件,参数fileToGzip
为待压缩的文件,gzipFileName
为压缩后的GZIP文件