压缩流和解压缩流

解压缩流ZipInputStream
- 压缩包里面的每一个文件或文件夹都是一个ZipEntry对象
- 解压本质:把每一个ZipEntry对象按照层级拷贝到本地另一个文件夹中
解压
public static void main(String[] args) throws IOException {
File scr = new File("xxx.zip");
File dest = new File("...");
unZip(src, dest);
}
public static void unZip(File src, File dest) throws IOException {
ZipInputStream zis = new ZipInputStream(new FileInputStream(src));
ZipEntry entry;
while ((entry = zis.getNextEntry()) != null) {
if (entry.isDirectory()) {
File file = new File(dest, entry.toString());
file.mkdirs();
} else {
FileOutputString fos = new FileOutputStream(new File(dest, entry.toString()));
int b;
while ((b = zis.read()) != -1) {
fos.write(b);
}
fos.close();
zis.closeEntry();
}
}
zis.close();
}
压缩流ZipOutputStream
- 压缩包里面的每一个文件或文件夹都是一个ZipEntry对象
- 压缩本质:把每一个文件/文件夹看作ZipEntry对象放到压缩包中
压缩单个文件
public static void main(String[] args) throws IOException {
File scr = new File("...\\a.txt");
File dest = new File("...");
toZip(src, dest);
}
public static void toZip(File src, File dest) throws IOException {
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(new File(dest, "a.zip")));
ZipEntry entry = new ZipEntry("a.txt");
zos.putNextEntry(entry);
FileInputStream fis = new FileInputStream(src);
int b;
while ((b = fis.read()) != -1) {
zos.write(b);
}
zos.closeEntry();
zos.close();
}
压缩文件夹
public static void main(String[] args) throws IOException {
File scr = new File("...\\aaa");
File destParent = src.getParentFile();
File dest = new File(destParent, scr.getName() + ".zip");
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(dest));
toZip(src, zos, src.getName());
zos.close();
}
public static void toZip(File src, ZipOutputStream zos, String name) {
File[] files = src.listFiles();
for (File file : files) {
if (file.isFile()) {
ZipEntry entry = new ZipEntry(name + "\\" + file.getName());
zos.putNextEntry(entry);
FileInputStream fis = new FileInputStream(file);
int b;
while ((b = fis.read()) != -1) {
zos.write(b);
}
fis.close();
zos.closeEntry();
} else {
toZip(file, zos, name + "\\" + file.getName());
}
}
}