在这篇文章中,我们将向你展示如何将单个文件压缩成zip和多个文件压缩成zip格式。本文的例子使用try-with-resources
语句来自动关闭资源,并在jdk 8及以后的版本中编译和执行。
Java自带的 "java.util.zip "库可以以ZIp
格式进行数据压缩。
ZIP
格式压缩单个文件示例FileInputStream in = new FileInputStream("C:/Project_Work/samples/sample.txt");
FileOutputStream fos = new FileOutputStream("C:/Project_Work/samples/src_sample.zip")
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* This Java program demonstrates how to compress single file in ZIP format.
* @author javaguides.net
*/
public class CompressZipFile {
public static void main(String[] args) {
try (FileOutputStream fos = new FileOutputStream("C:/Project_Work/samples/src_sample.zip");
ZipOutputStream zos = new ZipOutputStream(fos);
FileInputStream in = new FileInputStream("C:/Project_Work/samples/sample.txt");) {
ZipEntry ze= new ZipEntry("sample.txt");
zos.putNextEntry(ze);
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
ZIP
格式压缩多个文件 示例读取文件夹 "C:\Project_Work\samples_src_sample "中的所有文件,并将其压缩成一个压缩文件--"C:\Project_Work\samples\dest_sample.zip"。它也会递归地压缩一个目录。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* This Java program demonstrates how to compress multiple files in ZIP format.
*
* @author javaguides.net
*
*/
public class CompressMultipleFilesToZip {
List<String> fileList;
private static final String OUTPUT_ZIP_FILE = "C:\\Project_Work\\samples\\dest_sample.zip";
private static final String SOURCE_FOLDER = "C:\\Project_Work\\samples\\src_sample";
CompressMultipleFilesToZip() {
fileList = new ArrayList<String>();
}
public static void main(String[] args) {
CompressMultipleFilesToZip appZip = new CompressMultipleFilesToZip();
appZip.generateFileList(new File(SOURCE_FOLDER));
appZip.zipIt(OUTPUT_ZIP_FILE);
}
/**
* Zip it
*
* @param zipFile
* output ZIP file location
*/
public void zipIt(String zipFile) {
byte[] buffer = new byte[1024];
try (FileOutputStream fos = new FileOutputStream(zipFile); ZipOutputStream zos = new ZipOutputStream(fos);) {
System.out.println("Output to Zip : " + zipFile);
for (String file : this.fileList) {
System.out.println("File Added : " + file);
ZipEntry ze = new ZipEntry(file);
zos.putNextEntry(ze);
try (FileInputStream in = new FileInputStream(SOURCE_FOLDER + File.separator + file);) {
int len;
while ((len = in.read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
}
}
System.out.println("Done");
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Traverse a directory and get all files, and add the file into fileList
*
* @param node
* file or directory
*/
public void generateFileList(File node) {
// add file only
if (node.isFile()) {
fileList.add(generateZipEntry(node.getAbsoluteFile().toString()));
}
if (node.isDirectory()) {
String[] subNote = node.list();
for (String filename : subNote) {
generateFileList(new File(node, filename));
}
}
}
/**
* Format the file path for zip
*
* @param file
* file path
* @return Formatted file path
*/
private String generateZipEntry(String file) {
return file.substring(SOURCE_FOLDER.length() + 1, file.length());
}
}
输出:
Output to Zip : C:\Project_Work\samples\dest_sample.zip
File Added : sample.txt
File Added : sample1.txt
File Added : sample2.txt
Done
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.javaguides.net/2018/07/how-to-compress-files-in-zip-format-in-java.html
内容来源于网络,如有侵权,请联系作者删除!