java zip追加_Java中往zip压缩包追加文件

packagecom.example.demo;import java.io.*;importjava.util.ArrayList;importjava.util.Enumeration;importjava.util.List;importjava.util.zip.ZipException;import org.apache.tools.zip.*;public classZipUtil {private static int BUFFERSIZE = 1024;/*** 压缩

*

*@parampaths

*@paramfileName*/

public static void zip(Listpaths, String fileName) {

ZipOutputStream zos= null;try{

zos= new ZipOutputStream(newFileOutputStream(fileName));for(String filePath : paths) {//递归压缩文件

File file = newFile(filePath);

String relativePath=file.getName();if(file.isDirectory()) {

relativePath+=File.separator;

}

zipFile(file, relativePath, zos);

}

}catch(IOException e) {

e.printStackTrace();

}finally{try{if (zos != null) {

zos.close();

}

}catch(IOException e) {

e.printStackTrace();

}

}

}public static voidzipFile(File file, String relativePath, ZipOutputStream zos) {

InputStream is= null;try{if (!file.isDirectory()) {

ZipEntry zp= newZipEntry(relativePath);

zos.putNextEntry(zp);

is= newFileInputStream(file);byte[] buffer = new byte[BUFFERSIZE];int length = 0;while ((length = is.read(buffer)) >= 0) {

zos.write(buffer,0, length);

}

zos.setEncoding("gbk");//解决文件名中文乱码

zos.flush();

zos.closeEntry();

}else{

String tempPath= null;for(File f : file.listFiles()) {

tempPath= relativePath +f.getName();if(f.isDirectory()) {

tempPath+=File.separator;

}

zipFile(f, tempPath, zos);

}

}

}catch(IOException e) {

e.printStackTrace();

}finally{try{if (is != null) {

is.close();

}

}catch(IOException e) {

e.printStackTrace();

}

}

}/*** 解压缩

*

*@paramfileName

*@parampath*/

public static Listunzip(String fileName, String path) {

FileOutputStream fos= null;

InputStream is= null;

List filePaths = new ArrayList();try{

ZipFile zf= new ZipFile(newFile(fileName), "UTF-8");

Enumeration> en=zf.getEntries();while(en.hasMoreElements()) {

ZipEntry zn=(ZipEntry) en.nextElement();if (!zn.isDirectory()) {

is=zf.getInputStream(zn);

File f= new File(path +zn.getName());

File file=f.getParentFile();

file.mkdirs();

fos= new FileOutputStream(path +zn.getName());int len = 0;byte bufer[] = new byte[BUFFERSIZE];while (-1 != (len =is.read(bufer))) {

fos.write(bufer,0, len);

}

fos.close();

filePaths.add(path+zn.getName());

}

}

}catch(ZipException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}finally{try{if (null !=is) {

is.close();

}if (null !=fos) {

fos.close();

}

}catch(IOException e) {

e.printStackTrace();

}

}returnfilePaths;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值