java 项目总是有上传 zip 包和下载 zip 包的需求,这时就得用 zipinputstream 和 zipoutputstream 类。
基础概念zipoutputstream:是一种 filterinputstream 、装饰器模式中的实现类,它可以直接读取zip 包的内容 zipoutputstream (outputstream out):zip 输出流zipentry(string name):表示压缩文件中的一个文件或者目录void putnextentry(zipentry e):写入新的压缩文件或者目录zipiutputstream:是一种 filteroutputstream, 可以实现 zip 文件的解压 zipiutputstream (iutputstream out):zip 输入流zipentry getnextentry():得到压缩文件中的一个文件或者目录压缩压缩文件就是先读取一个文件夹的内容,创建 zipentry 放入 zipoutputstream 下,然后用 inputstream 读取源文件内容并写入 zipoutputstream。
/** * 压缩文件 * @param sourcefilepath 待压缩的文件路径 * @param zipfilepath 压缩后存放路径 * @return */public static void zip(string sourcefilepath, string zipfilepath) { file sourcefile = new file(sourcefilepath); if (!sourcefile.exists()) { system.out.println(sourcefilepath + 不存在); return; } file zipfile = new file(zipfilepath); if (zipfile.exists()) { system.out.println(zipfilepath + 已经存在); return; } try { byte[] buffer = new byte[1024]; try (zipoutputstream zos = new zipoutputstream(new bufferedoutputstream(new fileoutputstream(zipfile)))){ for(file file: sourcefile.listfiles()) { // 创建 zip 中的文件,并添加进压缩包 zipentry zipentry = new zipentry(file.getname()); zos.putnextentry(zipentry); // 读取待压缩的文件并写进压缩包里 try (inputstream bis = new bufferedinputstream(new fileinputstream(file))){ int read = 0; while ((read = bis.read(buffer)) != -1) { zos.write(buffer, 0, read); } } } } } catch (exception e) { e.printstacktrace(); }}解压一个压缩文件就是一个特殊的 file 叫做 zipfile,用 enumeration 类取出 zip 文件中被压缩的文件。
list filenames=new arraylist();try{ zipfile zipfile=new zipfile(path, charset.forname(gbk)); enumeration entries = zipfile.entries(); while(entries.hasmoreelements()){ string filename=entries.nextelement().getname(); filenames.add(filename); system.out.println(文件名称: +filename); }}catch (exception e){ e.printstacktrace();}解压文件 就是先用 zipfile.entries() 读取压缩文件夹中的文件, 生成 inputstream 流后写入被解压的 输出流
/** * 解压 * @param zippath zip 文件夹路径 * @param targetpath 解压路径 */ public static void unzip(string zippath,string targetpath){ file pathfile = new file(targetpath); if(!pathfile.exists()){ pathfile.mkdirs(); } try{ //指定编码 try(zipfile zipfile = new zipfile(zippath, charset.forname(gbk))) { //遍历里面的文件及文件夹 enumeration entries = zipfile.entries(); while (entries.hasmoreelements()) { zipentry entry = (zipentry) entries.nextelement(); string zipentryname = entry.getname(); try (inputstream in = zipfile.getinputstream(entry)) { string outpath = (targetpath + file.separator + zipentryname); //判断路径是否存在,不存在则创建文件路径 file file = new file(outpath.substring(0, outpath.lastindexof(file.separator))); if (!file.exists()) { file.mkdirs(); } //判断文件全路径是否为文件夹 if (new file(outpath).isdirectory()) continue; try (outputstream out = new fileoutputstream(outpath)) { byte[] buffer = new byte[1024]; int len; while ((len = in.read(buffer)) > 0) { out.write(buffer, 0, len); } } } } } }catch ( exception e){ e.printstacktrace(); } }总结介绍了一下 java 中的压缩文件是如何解压与压缩的,对小伙伴们有帮助的话就点个赞哦。
阿里云ET医疗大脑预测个体的发病概率准确率能达到83%
亚马逊搜索算法被用于传播疫苗虚假信息
“造假”Atlas之后,这个机器人打保龄球视频惊呆了网友
线性脉冲调频系统
纯电感电路中电压与电流的关系解析
java中的压缩文件是如何解压与压缩的
机器视觉常用接口介绍
锂电池一般都能使用多久,锂电池的寿命有多久
你还要骂老罗吗?锤子手机T3曝光:残暴的设计,顶级的配置
猜一猜:这个未来植入医疗部件适合用在人体哪个部位?
行业资讯 | PoE-Tic在法国巴黎举行的展会上展示了他们MIELA系统
万用表怎么测整流桥的好坏 三相发电机整流桥坏了还会发电吗
新机iPhone8无创新iPhone7价格再跌新低,你还会买iPhone8吗?
简单易制的TDA2822M功放,TDA2822 amplifier
海信电器将收购东芝电视,交易金额达129亿日元
BK7231N-BL2028N,上海博通ble+Wi-Fi-双模soc物联网芯片,支持全新matter协议
高效、快捷的AC/DC电源测试方案详解
3D打印实现打印光泽度 未来或用于制作假肢
JPEG2000减少了数字视频分发的延迟
相辅相成:用5G和Wi-Fi 6赋能智慧城市