电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

如何基于java實(shí)現(xiàn)解壓ZIP TAR等文件

瀏覽:32日期:2022-08-27 18:51:03

java實(shí)現(xiàn)對常用.ZIP , .TAR, .TAR.BZ2, .BZ2 ,.TAR.GZ ,.GZ格式文件的解壓。

首先需要引入maven依賴,這里使用的是Apache的壓縮工具包c(diǎn)ommon-compress,改工具包支持解壓、壓縮,此代碼中我列舉出一個zip的壓縮示例,其他格式的只需切換改格式對應(yīng)的流即可。

對于RAR格式文件的解壓,目前該工具包還不支持,希望大家做過的可以多多交流。

<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-compress</artifactId> <version>1.19</version></dependency>

import org.apache.commons.compress.archivers.tar.TarArchiveEntry;import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;import org.apache.commons.compress.utils.IOUtils;import java.io.*;/** * @author :zhangzhiyong * @description: java實(shí)現(xiàn)常見文件格式的解壓與壓縮 * 支持.ZIP .TAR .TAR.BZ2 .BZ2 .TAR.GZ .GZ * 其他格式compress包也支持,在此基礎(chǔ)上開發(fā)即可 * 另外壓縮文件只寫了ZIP壓縮的方法zipCompression,其他的格式類似,換成對應(yīng)的文件流即可。 * 暫不支持RAR壓縮格式,RAR可以用junrar的工具包,但是有缺陷: * 其一:如果壓縮文件中有中文名字的文件夾,解壓以后文件夾名字是亂碼,但是不影響文件夾里面的文件; * 其二:最新 WinRar 壓縮產(chǎn)生的 .rar 文件可能會無法解壓。 * 缺陷原因:rar 有版權(quán),有些東西沒有公開,對解壓有一些限制,即使其他解壓包也可能有問題,但是建議嘗試。 * @date :2020/7/1 20:44 */public class CompressionFileUtil { /** * @param filePath 需要解壓的zip文件的完成路徑。 * @param unzipPath 解壓過后生成文件的存放路徑 * @description: 對zip文件進(jìn)行解壓。 * @return: boolean * @author: ZZY * @time: 2020/7/2 14:47 */ public static boolean zipUnCompress(String filePath, String unzipPath) throws IOException { System.out.println('開始解壓ZIP..........'); FileInputStream fis = null; ZipArchiveInputStream zis = null; try { File file = new File(filePath); fis = new FileInputStream(file); zis = new ZipArchiveInputStream(fis); ZipArchiveEntry nze = null; while ((nze = zis.getNextZipEntry()) != null) {FileOutputStream os = null;BufferedOutputStream bos = null;try { System.out.println('正在解壓.....' + nze.getName()); //自動添加File.separator文件路徑的分隔符,根據(jù)系統(tǒng)判斷是還是/ String dir = unzipPath + File.separator + nze.getName(); //解壓全路徑 System.out.println('dir---' + dir); File file1 = null; if (nze.isDirectory()) { file1 = new File(dir); file1.mkdirs(); } else { file1 = new File(dir); os = new FileOutputStream(file1); bos = new BufferedOutputStream(os); /*byte [] bt = new byte[1024]; int len = 0; while((len = zis.read(bt,0,1024)) != -1){ bos.write(bt,0,len); }*/ IOUtils.copy(zis, bos); //作用與上面注釋代碼一樣 } System.out.println('解壓完成......');} catch (FileNotFoundException e) { e.printStackTrace(); return false;} finally { if (bos != null) { bos.close(); } if (os != null) { os.close(); }} } } catch (Exception e) { e.printStackTrace(); return false; } finally { if (zis != null) {zis.close(); } if (fis != null) {fis.close(); } } return true; } /** * @param filesPathArray 多個文件的絕對路徑,是一個數(shù)組。 * @param zipFilePath 生成的壓縮文件的位置,包括生成的文件名,如D:ziptest.zip * @description: 將多個文件壓縮成ZIP壓縮包。 * @return: boolean * @author: ZZY * @time: 2020/7/2 14:42 */ public static boolean zipCompression(String[] filesPathArray, String zipFilePath) throws Exception { System.out.println('開始壓縮ZIP文件'); ZipArchiveOutputStream zos = null; FileOutputStream fos = null; try { fos = new FileOutputStream(new File(zipFilePath)); zos = new ZipArchiveOutputStream(fos); for (String filePath : filesPathArray) {FileInputStream fis = null;BufferedInputStream bis = null;try { File file = new File(filePath); // 第二個參數(shù)如果是文件全路徑名,那么壓縮時也會將路徑文件夾也縮進(jìn)去; // 我們只壓縮目標(biāo)文件,而不壓縮該文件所處位置的相關(guān)文件夾,所以這里我們用file.getName() System.out.println('開始壓縮...' + file.getName()); ZipArchiveEntry zae = new ZipArchiveEntry(file, file.getName()); zos.putArchiveEntry(zae); fis = new FileInputStream(file); bis = new BufferedInputStream(fis); int count; byte[] bt = new byte[1024]; while ((count = bis.read(bt, 0, 1024)) != -1) { zos.write(bt, 0, count); }} finally { zos.closeArchiveEntry(); if (bis != null) bis.close(); if (fis != null) fis.close();} } } finally { if (zos != null)zos.close(); if (fos != null)fos.close(); } System.out.println('壓縮完成......'); return true; } /** * @param inputStream 每種TAR文件用不同的輸入流,unCompress方法中已注明 * @param unTarPath TAR文件解壓后的存放路徑 * @description: 解壓TAR類文件,包括.TAR .TAR.BZ2 .TAR.GZ * @return: void * @author: ZZY * @time: 2020/7/2 17:42 */ public static void unTar(InputStream inputStream, String unTarPath) throws IOException { FileInputStream fis = null; TarArchiveInputStream tis = null; try { tis = new TarArchiveInputStream(inputStream); TarArchiveEntry nte = null; System.out.println('開始解壓......'); while ((nte = tis.getNextTarEntry()) != null) {String dir = unTarPath + File.separator + nte.getName();System.out.println('正在解壓......' + dir);FileOutputStream fos = null;BufferedOutputStream bos = null;try { if (nte.isDirectory()) { File file1 = new File(dir); file1.mkdirs(); } else { File file2 = new File(dir); fos = new FileOutputStream(file2); bos = new BufferedOutputStream(fos); IOUtils.copy(tis, bos); }} catch (Exception e) { e.printStackTrace();} finally { if (bos != null) { bos.close(); } if (fos != null) { fos.close(); }} } System.out.println('解壓完成......'); } catch (IOException e) { e.printStackTrace(); } finally { if (tis != null) {tis.close(); } if (fis != null) {fis.close(); } } } public static boolean unCompress(String filePath,String unCompressPath) throws Exception { String fileType = filePath.toUpperCase(); if(fileType.endsWith('.TAR')){ System.out.println('解壓的.TAR包'); //.TAR包用一般的FileInputStream流讀取 unTar(new FileInputStream(filePath),unCompressPath); } else if(fileType.endsWith('.TAR.GZ')){ System.out.println('解壓的.TAR.GZ包'); //.TAR.GZ包要用GzipCompressorInputStream讀取 unTar(new GzipCompressorInputStream(new FileInputStream(filePath)),unCompressPath); } else if(fileType.endsWith('.TAR.BZ2')){ System.out.println('解壓的.TAR.BZ2包'); unTar(new BZip2CompressorInputStream(new FileInputStream(filePath)),unCompressPath); } else if(fileType.endsWith('.ZIP')){ System.out.println('解壓的.ZIP包'); zipUnCompress(filePath,unCompressPath); } else{ System.out.println('暫不支持該種格式文件的解壓'); } return true; } public static void main(String[] args) throws Exception { unCompress('D:testzipnginx-1.18.0.rar','D:testzip'); }}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 泰国试管婴儿_泰国第三代试管婴儿_泰国试管婴儿费用/多少钱_孕泰来 | 食品质构分析仪-氧化诱导分析仪-瞬态法导热系数仪|热冰百科 | 有福网(yofus.com)洗照片冲印,毕业聚会纪念册相册制作个性DIY平台 | 立式壁挂广告机厂家-红外电容触摸一体机价格-华邦瀛 | 并离网逆变器_高频UPS电源定制_户用储能光伏逆变器厂家-深圳市索克新能源 | 成人纸尿裤,成人尿不湿,成人护理垫-山东康舜日用品有限公司 | 运动木地板厂家_体育木地板安装_篮球木地板选购_实木运动地板价格 | 三效蒸发器_多效蒸发器价格_四效三效蒸发器厂家-青岛康景辉 | 消泡剂-水处理消泡剂-涂料消泡剂-切削液消泡剂价格-东莞德丰消泡剂厂家 | 昆山新莱洁净应用材料股份有限公司-卫生级蝶阀,无菌取样阀,不锈钢隔膜阀,换向阀,离心泵 | 北京网站建设-企业网站建设-建站公司-做网站-北京良言多米网络公司 | 周口市风机厂,周鼓风机,河南省周口市风机厂| 螺旋丝杆升降机-SWL蜗轮-滚珠丝杆升降机厂家-山东明泰传动机械有限公司 | 聚丙烯酰胺PAM-聚合氯化铝PAC-絮凝剂-河南博旭环保科技有限公司 巨野电机维修-水泵维修-巨野县飞宇机电维修有限公司 | 400电话_400电话申请_888元包年_400电话办理服务中心_400VIP网 | 月嫂_保姆_育婴_催乳_母婴护理_产后康复_养老护理-吉祥到家家政 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 电子海图系统-电梯检验系统-智慧供热系统开发-商品房预售资金监管系统 | 儿童乐园|游乐场|淘气堡招商加盟|室内儿童游乐园配套设备|生产厂家|开心哈乐儿童乐园 | 上海办公室装修,办公楼装修设计,办公空间设计,企业展厅设计_写艺装饰公司 | 安规电容|薄膜电容|陶瓷电容|智旭JEC安规电容厂家 | 办公室家具公司_办公家具品牌厂家_森拉堡办公家具【官网】 | 聚氨酯催化剂K15,延迟催化剂SA-1,叔胺延迟催化剂,DBU,二甲基哌嗪,催化剂TMR-2,-聚氨酯催化剂生产厂家 | 纸箱抗压机,拉力机,脂肪测定仪,定氮仪-山东德瑞克仪器有限公司 | 注塑模具_塑料模具_塑胶模具_范仕达【官网】_东莞模具设计与制造加工厂家 | 吊篮式|移动式冷热冲击试验箱-二槽冷热冲击试验箱-广东科宝 | 天津次氯酸钠酸钙溶液-天津氢氧化钠厂家-天津市辅仁化工有限公司 | 金属切削液-脱水防锈油-电火花机油-抗磨液压油-深圳市雨辰宏业科技发展有限公司 | 滤芯,过滤器,滤油机,贺德克滤芯,精密滤芯_新乡市宇清流体净化技术有限公司 | 选矿设备-新型重选设备-金属矿尾矿重选-青州冠诚重工机械有限公司 | BESWICK球阀,BESWICK接头,BURKERT膜片阀,美国SEL继电器-东莞市广联自动化科技有限公司 | 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | 安全阀_弹簧式安全阀_美标安全阀_工业冷冻安全阀厂家-中国·阿司米阀门有限公司 | 广东西屋电气有限公司-广东西屋电气有限公司 | 反渗透阻垢剂-缓蚀阻垢剂厂家-循环水处理药剂-山东鲁东环保科技有限公司 | 化工ERP软件_化工新材料ERP系统_化工新材料MES软件_MES系统-广东顺景软件科技有限公司 | 陕西视频监控,智能安防监控,安防系统-西安鑫安5A安防工程公司 | 垃圾清运公司_环卫保洁公司_市政道路保洁公司-华富环境 | 破碎机锤头_合金耐磨锤头_郑州宇耐机械工程技术有限公司 | 深圳天际源广告-形象堆头,企业文化墙,喷绘,门头招牌设计制作专家 | 西门子气候补偿器,锅炉气候补偿器-陕西沃信机电工程有限公司 | 河南不锈钢水箱_地埋水箱_镀锌板水箱_消防水箱厂家-河南联固供水设备有限公司 |