前面,笔者讲到。如何把文件打包为zip包,那么反过来怎么把zip文件包解压为正常文件呢?把压缩包解压为正常文件包,要比把文件打包为zip简单一点。因为存在多级文件的压缩,却不存在多级文件的解压缩。也就是说,压缩时,你要把所有文件都塞到压缩包里。而解压缩只需要解压一级,压缩包里面的压缩文件则不必理会。
<强>直接上代码喽:强>
<代码>/* * *解压文件 * @param zipPath要解压的目标文件 * @param descDir指定解压目录 * @return解压结果:成功,失败 */@SuppressWarnings (“rawtypes”) zipPath公共布尔decompressZip(字符串,字符串descDir) { 文件zipFile=新文件(zipPath); 布尔标志=false; 文件pathFile=新文件(descDir); 如果(! pathFile.exists ()) { pathFile.mkdirs (); } ZipFile邮政=零; 尝试{ 邮政=new ZipFile (ZipFile Charset.forName (“gbk”));//防止中文目录,乱码 (枚举项=zip.entries ();entries.hasMoreElements ();) { ZipEntry入口=(ZipEntry) entries.nextElement (); 字符串zipEntryName=entry.getName (); InputStream的=zip.getInputStream(入口);//指定解压后的文件夹+当前邮政文件的名称 字符串outPath=(descDir + zipEntryName)。替换(“/?File.separator);//判断路径是否存在,不存在则创建文件路径 文件文件=新文件(outPath。substring (0, outPath.lastIndexOf (File.separator))); 如果(! file.exists ()) { file.mkdirs (); }//判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压 如果(新文件(outPath) .isDirectory ()) { 继续; }//保存文件路径信息(可利用md5.zip名称的唯一性,来判断是否已经解压) System.err。println(“当前zip解压之后的路径为:" + outPath); OutputStream=新FileOutputStream (outPath); byte[]来=新字节[2048]; int len; 在((len=in.read(来)在0){ out.write(来,0,len); } in.close (); out.close (); } 国旗=true;//必须关闭,要不然这个邮政文件一直被占用着,要删删不掉,改名也不可以,移动也不行,整多了,系统还崩了。 zip.close (); }捕捉(IOException e) { e.printStackTrace (); } 返回国旗; }代码>
<强>找个例子实现一下:强>
<强>就你了! 强>
<强>调用:强>
<代码>字符串deal_zip=" C: \ \ 20180909. zip”; 字符串agter_zip=" D: \ \ red_ant_file ";//解压完塞到这里吧 布尔is_success=AllServiceIsHere.decompressZip (deal_zip agter_zip); 如果(is_success) { System.err.println(“恭喜你,解压成功!”); 其他}{ System.err。println(“对不起,你失败了!”); }代码>
<>强走你! 强>
<强>嗯嗯,达到了我所要求的。赶集去喽! 强>