JavaZIP压缩⽂件使⽤总结
做Java Web开发,有时候遇到将多个⽂件或者⽂件夹压缩成⼀个.zip⽂件,供前端下载。Java的JDK中提供⼀个java.util.zip的接⼝,供⼤家使⽤。如下图:
图上就是Java 的JDK提供的接⼝,但是压缩⽂件或者⽂件夹的时候,怎么使⽤上⾯的接⼝呢?下⾯我给出⼏个相关的接⼝,这些接⼝是下⾯压缩⽂件或者⽂件夹过程中使⽤到的。
java.util.zip.ZipEntry;
java.util.zip.ZipOutputStream;
下⾯的压缩过程主要是通过这两个接⼝压缩⽂件或者⽂件夹;
下⾯先给出源码,后⾯详细介绍的接⼝中的⽅法:
package ZIPUtil;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* 学习使⽤java.util.zip压缩⽂件或者⽂件夹
* @author lhm
*
*/
public class ZIPUtil {
/**
* @param args 主⽅法
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//第⼀个参数是需要压缩的源路径;第⼆个参数是压缩⽂件的⽬的路径,这边需要将压缩的⽂件名字加上去
compress("H:\\zip/scala","H:\\zip/oo.zip");
}
/**s
* 压缩⽂件
* @param srcFilePath 压缩源路径
* @param destFilePath 压缩⽬的路径
*/
public static void compress(String srcFilePath, String destFilePath) {
//
File src = new File(srcFilePath);
if (!ists()) {
throw new RuntimeException(srcFilePath + "不存在");
}
File zipFile = new File(destFilePath);
try {
FileOutputStream fos = new FileOutputStream(zipFile);
ZipOutputStream zos = new ZipOutputStream(fos);
String baseDir = "";
compressbyType(src, zos, baseDir);
zos.close();
} catch (Exception e) {
// TODO Auto-generated catch block
jdk怎么使用e.printStackTrace();
}
}
/**
* 按照原路径的类型就⾏压缩。⽂件路径直接把⽂件压缩,
* @param src
* @param zos
* @param baseDir
*/
private static void compressbyType(File src, ZipOutputStream zos,String baseDir) {
if (!ists())
return;
System.out.println("压缩路径" + baseDir + Name());
//判断⽂件是否是⽂件,如果是⽂件调⽤compressFile⽅法,如果是路径,则调⽤compressDir⽅法;        if (src.isFile()) {
//src是⽂件,调⽤此⽅法
compressFile(src, zos, baseDir);
} else if (src.isDirectory()) {
//src是⽂件夹,调⽤此⽅法
compressDir(src, zos, baseDir);
}
}
/**
* 压缩⽂件
*/
private static void compressFile(File file, ZipOutputStream zos,String baseDir) {
if (!ists())
return;
try {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
ZipEntry entry = new ZipEntry(baseDir + Name());
zos.putNextEntry(entry);
int count;
byte[] buf = new byte[1024];
while ((count = ad(buf)) != -1) {
zos.write(buf, 0, count);
}
bis.close();
} catch (Exception e) {
// TODO: handle exception
}
}
/**
* 压缩⽂件夹
*/
private static void compressDir(File dir, ZipOutputStream zos,String baseDir) {
if (!ists())
return;
File[] files = dir.listFiles();
if(files.length == 0){
try {
zos.putNextEntry(new ZipEntry(baseDir + Name()+File.separator));
} catch (IOException e) {
e.printStackTrace();
}
}
for (File file : files) {
compressbyType(file, zos, baseDir + Name() + File.separator);
}
}
}
  java.util.zip-压缩流程:
先将⽂件加载到⽂件流FileInputStream中,再将⽂件流输⼊到ZipOutputStream;
源⽂件路径:H:\\zip/scala,⽬的压缩⽂件zip的路径:H:\\zip/oo.zip

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。