将文件或者文件夹压缩成zip是Java中的一个常见任务。下面是一份详细的Java代码攻略来实现这个功能。
1. 引入相关依赖
Java提供了ZipOutputStream和ZipEntry这两个类来实现文件或者文件夹压缩成zip的功能,因此需要通过pom文件或者手动导入相关依赖。
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.21</version>
</dependency>
2. 完整代码
下面的代码展示了如何将文件夹或者文件压缩成zip格式:
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class ZipUtils {
private static final int BUFFER_SIZE = 1024;
public static void compressFilesToZip(String filePath, String zipPath) throws IOException {
File file = new File(filePath);
File zipFile = new File(zipPath);
ZipArchiveOutputStream zipArchiveOutputStream = new ZipArchiveOutputStream(new FileOutputStream(zipFile));
if (file.isDirectory()) {
compressDirectoryToZip(zipArchiveOutputStream, file, "");
} else {
compressFileToZip(zipArchiveOutputStream, file, "");
}
zipArchiveOutputStream.finish();
zipArchiveOutputStream.close();
}
private static void compressDirectoryToZip(ZipArchiveOutputStream zipArchiveOutputStream, File file, String parent) throws IOException {
File[] files = file.listFiles();
if (files.length == 0) {
ZipArchiveEntry zipArchiveEntry = new ZipArchiveEntry(parent + file.getName() + File.separator);
zipArchiveOutputStream.putArchiveEntry(zipArchiveEntry);
zipArchiveOutputStream.closeArchiveEntry();
return;
}
for (File subFile : files) {
if (subFile.isDirectory()) {
compressDirectoryToZip(zipArchiveOutputStream, subFile, parent + file.getName() + File.separator);
} else {
compressFileToZip(zipArchiveOutputStream, subFile, parent + file.getName() + File.separator);
}
}
}
private static void compressFileToZip(ZipArchiveOutputStream zipArchiveOutputStream, File file, String parent) throws IOException {
ZipArchiveEntry zipArchiveEntry = new ZipArchiveEntry(parent + file.getName());
zipArchiveOutputStream.putArchiveEntry(zipArchiveEntry);
FileInputStream fileInputStream = new FileInputStream(file);
byte[] buf = new byte[BUFFER_SIZE];
int len;
while ((len = fileInputStream.read(buf)) > 0) {
zipArchiveOutputStream.write(buf, 0, len);
}
zipArchiveOutputStream.closeArchiveEntry();
fileInputStream.close();
}
}
3. 示例说明
下面提供两个示例:
示例1:压缩单个文件
public static void main(String[] args) throws IOException {
compressFilesToZip("/path/to/file.txt", "/path/to/file.zip");
}
这个示例是将一个单独的文件/file.txt压缩成为/file.zip文件。
示例2:压缩文件夹
public static void main(String[] args) throws IOException {
compressFilesToZip("/path/to/folder", "/path/to/folder.zip");
}
这个示例压缩了一个目录/path/to/folder,保存到了路径/path/to/folder.zip。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现将文件或者文件夹压缩成zip的详细代码 - Python技术站