ZipInputStream 和 ZipOutputStream 可以用于处理 ZIP 文件格式,ZipInputStream 可以从 ZIP 文件中读取数据,ZipOutputStream 可以向 ZIP 文件中写入数据。
ZipInputStream示例代码
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipExample {
public static void main(String[] args) throws IOException {
String inputFile = "/Users/yuxinjiao/Documents/source.txt";
String outputFile = "/Users/yuxinjiao/Documents/source.zip";
// 设置zipoutputstream,并设置压缩级别
ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(outputFile));
zipOutputStream.setLevel(9);
// 读取需要压缩的文件到文件输入流
FileInputStream fileInputStream = new FileInputStream(inputFile);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
// 设置压缩文件内部到名称
ZipEntry zipEntry = new ZipEntry(inputFile);
zipOutputStream.putNextEntry(zipEntry);
// 写入压缩文件
byte[] buf = new byte[1024];
int len;
while((len=bufferedInputStream.read(buf))>0) {
zipOutputStream.write(buf, 0, len);
}
bufferedInputStream.close();
zipOutputStream.closeEntry();
zipOutputStream.close();
System.out.println("file compressed successfully");
}
}
示例代码说明:
- 首先,我们创建ZipOutputStream并设置压缩级别。
- 接着,我们创建输入文件的FileInputStream,并使用BufferedInputStream包装它。
- 我们接着设置压缩文件内部的名称,并使用zipOutputStream.putNextEntry()方法将其写入ZipOutputStream中。
- 最后,我们从缓冲区读取文件数据并将其写入ZipOutputStream中。最后关闭输入流和ZipOutputStream。
ZipOutputStream示例代码
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class UnzipExample {
public static void main(String[] args) throws IOException {
String inputFile = "/Users/yuxinjiao/Documents/source.zip";
String outputFile = "/Users/yuxinjiao/Documents/source";
ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(inputFile));
ZipEntry zipEntry = zipInputStream.getNextEntry();
while(zipEntry !=null) {
// 如果是目录,则创建空目录
if(zipEntry.isDirectory()) {
new File(outputFile+File.separator+zipEntry.getName()).mkdirs();
} else {
// 如果是文件,则输出文件
FileOutputStream fileOutputStream = new FileOutputStream(outputFile+File.separator
+zipEntry.getName());
byte[] buf = new byte[1024];
int len;
while((len=zipInputStream.read(buf))>0){
fileOutputStream.write(buf, 0, len);
}
fileOutputStream.close();
}
zipInputStream.closeEntry();
zipEntry = zipInputStream.getNextEntry();
}
zipInputStream.close();
System.out.println("file uncompressed successfully");
}
}
示例代码说明:
- 使用ZipInputStream从指定输入文件中解压文件到指定的输出文件夹中。
- 我们创建ZipInputStream,然后循环读取压缩文件中的条目。如果当前条目是目录,则创建空目录,并使用mkdirs()方法创建目录。如果当前条目是文件,则使用FileOutputStream将文件写入到指定的输出文件中。
- 最后关闭当前ZipEntry,并通过getNextEntry()方法获取ZipInputStream中的下一个条目。