java实现一次性压缩多个文件到zip中的方法示例
程序员文章站
2023-11-14 15:12:34
本文实例讲述了java实现一次性压缩多个文件到zip中的方法。分享给大家供大家参考,具体如下:
1.需要引入包:
import java.io.file;
i...
本文实例讲述了java实现一次性压缩多个文件到zip中的方法。分享给大家供大家参考,具体如下:
1.需要引入包:
import java.io.file; import java.io.fileinputstream; import java.io.fileoutputstream; import java.io.ioexception; import java.util.arraylist; import java.util.list; import java.util.zip.zipentry; import java.util.zip.zipoutputstream; import org.springframework.util.stringutils;
2.代码
/** * @title: compress * @description: todo * @param filepaths 需要压缩的文件地址列表(绝对路径) * @param zipfilepath 需要压缩到哪个zip文件(无需创建这样一个zip,只需要指定一个全路径) * @param keepdirstructure 压缩后目录是否保持原目录结构 * @throws ioexception * @return int 压缩成功的文件个数 */ public static int compress(list<string> filepaths, string zipfilepath,boolean keepdirstructure) throws ioexception{ byte[] buf = new byte[1024]; file zipfile = new file(zipfilepath); //zip文件不存在,则创建文件,用于压缩 if(!zipfile.exists()) zipfile.createnewfile(); int filecount = 0;//记录压缩了几个文件? try { zipoutputstream zos = new zipoutputstream(new fileoutputstream(zipfile)); for(int i = 0; i < filepaths.size(); i++){ string relativepath = filepaths.get(i); if(stringutils.isempty(relativepath)){ continue; } file sourcefile = new file(relativepath);//绝对路径找到file if(sourcefile == null || !sourcefile.exists()){ continue; } fileinputstream fis = new fileinputstream(sourcefile); if(keepdirstructure!=null && keepdirstructure){ //保持目录结构 zos.putnextentry(new zipentry(relativepath)); }else{ //直接放到压缩包的根目录 zos.putnextentry(new zipentry(sourcefile.getname())); } //system.out.println("压缩当前文件:"+sourcefile.getname()); int len; while((len = fis.read(buf)) > 0){ zos.write(buf, 0, len); } zos.closeentry(); fis.close(); filecount++; } zos.close(); //system.out.println("压缩完成"); } catch (exception e) { e.printstacktrace(); } return filecount; }
3.测试
public static void main(string[] args) throws ioexception { list<string> sourcefilepaths = new arraylist<string>(); sourcefilepaths.add("d:/test/c08065.jpg"); sourcefilepaths.add("d:/test/新建文件夹/c08984.jpg"); sourcefilepaths.add("d:/test/找不到我.jpg");//试一个找不到的文件 //指定打包到哪个zip(绝对路径) string ziptempfilepath = "d:/test/test.zip"; //调用压缩 int s = compress(sourcefilepaths, ziptempfilepath,false); system.out.println("成功压缩"+s+"个文件"); }