使用java中的java.util.zip包把文件或文件夹压缩成zip文件
硅谷探秘者
2021-11-24发表
java基础
0
0
1358
核心类ZipOutputStream的api文档请参考:
https://nowjava.com/docs/java-api-11/java.base/java/util/zip/ZipOutputStream.html
java代码
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipTest {
public static void main(String[] args) throws Exception{
// 本地文件夹位置
File folder = new File("D://data//ziptest//log");
// 生成压缩文件的位置
String outputFileName = "D://data//ziptest//test.zip";
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(
new FileOutputStream(new File(outputFileName))
);
ZipOutputStream zipOutputStream = new ZipOutputStream(bufferedOutputStream);
bfsZip(folder,zipOutputStream,"");
zipOutputStream.finish();
zipOutputStream.close();
System.out.println("压缩成功");
}
private static void bfsZip(File file,ZipOutputStream zipOutputStream,String base) throws IOException {
// 是文件夹
if(file.isDirectory()){
// 压缩文件夹
base = base+file.getName()+"/";
zipOutputStream.putNextEntry(new ZipEntry(base));
File[] files = file.listFiles();
if(files!=null && files.length>0){
for (File file1 : files) {
// 递归压缩
bfsZip(file1,zipOutputStream,base);
}
}
zipOutputStream.closeEntry();
}else{
// 是文件
System.out.println(base+file.getName());
zipOutputStream.putNextEntry(new ZipEntry(base+file.getName()));
FileInputStream fileInputStream = new FileInputStream(file);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
byte[] b = new byte[1024];
int length = 0;
while ((length = bufferedInputStream.read(b))!=-1){
zipOutputStream.write(b,0,length);
}
bufferedInputStream.close();
fileInputStream.close();
zipOutputStream.closeEntry();
}
}
}