📅  最后修改于: 2023-12-03 15:31:49.490000             🧑  作者: Mango
在Java中,可以使用ZipOutputStream和ZipInputStream类来进行文件的压缩和解压。
要对文件进行压缩,首先需要创建ZipOutputStream对象并指定要压缩的文件路径。接下来,通过putNextEntry方法添加需要压缩的文件,并使用write方法将文件写入压缩文件中。最后,使用close方法关闭ZipOutputStream对象。
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class FileCompressor {
public static void compress(String filePath) throws Exception {
ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(filePath + ".zip"));
File fileToZip = new File(filePath);
zipFile(fileToZip, fileToZip.getName(), zip);
zip.close();
}
private static void zipFile(File file, String fileName, ZipOutputStream zip) throws Exception {
if (file.isHidden()) {
return;
}
if (file.isDirectory()) {
File[] children = file.listFiles();
for (File childFile : children) {
zipFile(childFile, fileName + "/" + childFile.getName(), zip);
}
return;
}
FileInputStream fis = new FileInputStream(file);
ZipEntry zipEntry = new ZipEntry(fileName);
zip.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while ((length = fis.read(bytes)) >= 0) {
zip.write(bytes, 0, length);
}
fis.close();
}
}
要对已压缩的文件进行解压,首先需要创建ZipInputStream对象并指定需要解压的文件路径。接下来,使用getNextEntry方法获取压缩文件中的文件,并将其解压到指定路径下。最后,使用close方法关闭ZipInputStream对象。
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class FileDecompressor {
public static void decompress(String filePath) throws Exception {
File dir = new File(filePath.substring(0, filePath.lastIndexOf('.')));
if (!dir.exists()) {
dir.mkdirs();
}
FileInputStream fis = new FileInputStream(filePath);
ZipInputStream zip = new ZipInputStream(fis);
ZipEntry entry = zip.getNextEntry();
while (entry != null) {
String fileName = entry.getName();
File file = new File(dir + "/" + fileName);
if (entry.isDirectory()) {
file.mkdirs();
} else {
FileOutputStream fos = new FileOutputStream(file);
byte[] bytes = new byte[1024];
int length;
while ((length = zip.read(bytes)) >= 0) {
fos.write(bytes, 0, length);
}
fos.close();
}
zip.closeEntry();
entry = zip.getNextEntry();
}
}
}
下面是一个使用示例,先将指定路径下的文件压缩为zip文件,再将zip文件解压到指定路径下。
public class Demo {
public static void main(String[] args) throws Exception {
String filePath = "C:/tmp/test";
FileCompressor.compress(filePath);
String zipFilePath = filePath + ".zip";
FileDecompressor.decompress(zipFilePath);
}
}