Java文件解压
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; 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.compressors.bzip2.BZip2CompressorInputStream; import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream; import org.apache.commons.compress.utils.IOUtils; import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang3.StringUtils; public class FileUtil { public static int BUFFER_SIZE = 2048; private static List<String> unTar(InputStream inputStream, String destDir) throws Exception { List<String> fileNames = new ArrayList<String>(); TarArchiveInputStream tarIn = new TarArchiveInputStream(inputStream, BUFFER_SIZE); TarArchiveEntry entry = null; try { while ((entry = tarIn.getNextTarEntry()) != null) { fileNames.add(entry.getName()); if (entry.isDirectory()) {//是目录 createDirectory(destDir, entry.getName());//创建空目录 } else {//是文件 File tmpFile = new File(destDir + File.separator + entry.getName()); createDirectory(tmpFile.getParent() + File.separator, null);//创建输出目录 OutputStream out = null; try { out = new FileOutputStream(tmpFile); int length = 0; byte[] b = new byte[2048]; while ((length = tarIn.read(b)) != -1) { out.write(b, 0, length); } } finally { IOUtils.closeQuietly(out); } } } } catch (Exception e) { e.printStackTrace(); throw e; } finally { IOUtils.closeQuietly(tarIn); } return fileNames; } public static List<String> unTar(String tarFile, String destDir) throws Exception { File file = new File(tarFile); return unTar(file, destDir); } public static List<String> unTar(File tarFile, String destDir) throws Exception { if(StringUtils.isBlank(destDir)) { destDir = tarFile.getParent(); } destDir = destDir.endsWith(File.separator) ? destDir : destDir + File.separator; return unTar(new FileInputStream(tarFile), destDir); } public static List<String> unTarBZip2(File tarFile,String destDir) throws Exception{ if(StringUtils.isBlank(destDir)) { destDir = tarFile.getParent(); } destDir = destDir.endsWith(File.separator) ? destDir : destDir + File.separator; return unTar(new BZip2CompressorInputStream(new FileInputStream(tarFile)), destDir); } public static List<String> unTarBZip2(String file,String destDir) throws Exception{ File tarFile = new File(file); return unTarBZip2(tarFile, destDir); } public static List<String> unBZip2(String bzip2File, String destDir) throws IOException { File file = new File(bzip2File); return unBZip2(file, destDir); } public static List<String> unBZip2(File srcFile, String destDir) throws IOException { if(StringUtils.isBlank(destDir)) { destDir = srcFile.getParent(); } destDir = destDir.endsWith(File.separator) ? destDir : destDir + File.separator; List<String> fileNames = new ArrayList<String>(); InputStream is = null; OutputStream os = null; try { File destFile = new File(destDir, FilenameUtils.getBaseName(srcFile.toString())); fileNames.add(FilenameUtils.getBaseName(srcFile.toString())); is = new BZip2CompressorInputStream(new BufferedInputStream(new FileInputStream(srcFile), BUFFER_SIZE)); os = new BufferedOutputStream(new FileOutputStream(destFile), BUFFER_SIZE); IOUtils.copy(is, os); } finally { IOUtils.closeQuietly(os); IOUtils.closeQuietly(is); } return fileNames; } public static List<String> unGZ(String gzFile, String destDir) throws IOException { File file = new File(gzFile); return unGZ(file, destDir); } public static List<String> unGZ(File srcFile, String destDir) throws IOException { if(StringUtils.isBlank(destDir)) { destDir = srcFile.getParent(); } destDir = destDir.endsWith(File.separator) ? destDir : destDir + File.separator; List<String> fileNames = new ArrayList<String>(); InputStream is = null; OutputStream os = null; try { File destFile = new File(destDir, FilenameUtils.getBaseName(srcFile.toString())); fileNames.add(FilenameUtils.getBaseName(srcFile.toString())); is = new GzipCompressorInputStream(new BufferedInputStream(new FileInputStream(srcFile), BUFFER_SIZE)); os = new BufferedOutputStream(new FileOutputStream(destFile), BUFFER_SIZE); IOUtils.copy(is, os); } finally { IOUtils.closeQuietly(os); IOUtils.closeQuietly(is); } return fileNames; } public static List<String> unTarGZ(File tarFile,String destDir) throws Exception{ if(StringUtils.isBlank(destDir)) { destDir = tarFile.getParent(); } destDir = destDir.endsWith(File.separator) ? destDir : destDir + File.separator; return unTar(new GzipCompressorInputStream(new FileInputStream(tarFile)), destDir); } public static List<String> unTarGZ(String file,String destDir) throws Exception{ File tarFile = new File(file); return unTarGZ(tarFile, destDir); } public static void createDirectory(String outputDir,String subDir){ File file = new File(outputDir); if(!(subDir == null || subDir.trim().equals(""))){//子目录不为空 file = new File(outputDir + File.separator + subDir); } if(!file.exists()){ file.mkdirs(); } } public static List<String> unZip(File zipfile, String destDir) throws Exception { if(StringUtils.isBlank(destDir)) { destDir = zipfile.getParent(); } destDir = destDir.endsWith(File.separator) ? destDir : destDir + File.separator; ZipArchiveInputStream is = null; List<String> fileNames = new ArrayList<String>(); try { is = new ZipArchiveInputStream(new BufferedInputStream(new FileInputStream(zipfile), BUFFER_SIZE)); ZipArchiveEntry entry = null; while ((entry = is.getNextZipEntry()) != null) { fileNames.add(entry.getName()); if (entry.isDirectory()) { File directory = new File(destDir, entry.getName()); directory.mkdirs(); } else { OutputStream os = null; try { os = new BufferedOutputStream(new FileOutputStream(new File(destDir, entry.getName())), BUFFER_SIZE); IOUtils.copy(is, os); } finally { IOUtils.closeQuietly(os); } } } } catch(Exception e) { e.printStackTrace(); throw e; } finally { IOUtils.closeQuietly(is); } return fileNames; } public static List<String> unZip(String zipfile, String destDir) throws Exception { File zipFile = new File(zipfile); return unZip(zipFile, destDir); } public static List<String> unCompress(String compressFile, String destDir) throws Exception { String upperName= compressFile.toUpperCase(); List<String> ret = null; if(upperName.endsWith(".ZIP")) { ret = unZip(compressFile, destDir); } else if(upperName.endsWith(".TAR")) { ret = unTar(compressFile, destDir); } else if(upperName.endsWith(".TAR.BZ2")) { ret = unTarBZip2(compressFile, destDir); } else if(upperName.endsWith(".BZ2")) { ret = unBZip2(compressFile, destDir); } else if(upperName.endsWith(".TAR.GZ")) { ret = unTarGZ(compressFile, destDir); } else if(upperName.endsWith(".GZ")) { ret = unGZ(compressFile, destDir); } return ret; } public static void main(String[] args) throws Exception { //System.out.println(unZip("F:\\fileupload\\dna-sample.zip", "F:\\fileupload\\")); System.out.println(unTar("F:\\fileupload\\中文test.tar", "F:\\fileupload\\")); //System.out.println(unBZip2("F:\\fileupload\\中文test.xml.bz2", "F:\\fileupload\\")); //System.out.println(unTarBZip2("F:\\fileupload\\中文test.tar.bz2", "F:\\fileupload\\")); //System.out.println(unGZ("F:\\fileupload\\test.xml.gz", "F:\\fileupload\\")); //System.out.println(unTarGZ("F:\\fileupload\\all.tar.gz", "F:\\fileupload\\")); } }
Java文件解压的更多相关文章
- Java文件解压之TGZ解压
package com.alibaba.intl.batch.dependency; import java.io.File; import java.io.FileInputStream; impo ...
- java代码解压zip文件
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.Inp ...
- java压缩文件解压:调用WinRAR5命令强于自己写代码实现
最近,手上维护着一个几年前的系统,技术是用的JSP+Strust2,系统提供了rar和zip两种压缩格式的解压功能,后台是用java实现的 1.解压rar格式,采用的是java-unrar-0.3.j ...
- java批量解压文件夹下的所有压缩文件(.rar、.zip、.gz、.tar.gz)
// java批量解压文件夹下的所有压缩文件(.rar..zip..gz..tar.gz) 新建工具类: package com.mobile.utils; import com.github.jun ...
- java 提取(解压)zip文件中特定后缀的文件并保存到指定目录
内容简介 本文主要介绍使用ZipFile来提取zip压缩文件中特定后缀(如:png,jpg)的文件并保存到指定目录下. 导入包:import java.util.zip.ZipFile; 如需添加对r ...
- java 提取(解压)rar文件中特定后缀的文件并保存到指定目录
内容简介 本文主要介绍使用junrar来提取rar压缩文件中特定后缀(如:png,jpg)的文件并保存到指定目录下. 支持v4及以下版本压缩文件,不支持v5及以上. 在rar文件上右键,查看属性,在压 ...
- Linux 下面解压.tar.gz 和.gz文件解压的方式
Linux 下面解压.tar.gz 和.gz文件解压的方式 两种解压方式 1 .tar.gz 使用tar命令进行解压 tar -zxvf java.tar.gz 解压到指定的文件夹 tar -zxvf ...
- Java压缩/解压.zip、.tar.gz、.tar.bz2(支持中文)
本文介绍Java压缩/解压.zip..tar.gz..tar.bz2的方式. 对于zip文件:使用java.util.zip.ZipEntry 和 java.util.zip.ZipFile,通过设置 ...
- Java中解压文件名有中文的rar包出现乱码问题的解决
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j ...
随机推荐
- How to using x++ creating Vendors [AX2012]
.//Create party for the vendor public void createParty(VendorRequestCreate _vendorRequestCreate) { ; ...
- JS面向对象编程创建类的方式
js创建类的方式有几种,大致如下: 1,构造函数方式: function Car(parameters) { this.name = "objectboy"; } var cat1 ...
- 源码编译安装MySQL 5.7.9
安装CentOS 6.3 配置yum:[root@hank-yoon ~]# cd /etc/yum.repos.d/ [root@hank-yoon yum.repos.d]# mkdir a [r ...
- VS2010调试入门指南
1 导言 在软件开发周期中,测试和修正缺陷(defect,defect与bug的区别:Bug是缺陷的一种表现形式,而一个缺陷是可以引起多种Bug的)的时间远多于写代码的时间.通常,debug是指发现缺 ...
- 从零开始学ios开发(十四):Navigation Controllers and Table Views(上)
这一篇我们将学习一个新的控件Navigation Controller,很多时候Navigation Controller是和Table View紧密结合在一起的,因此在学习Navigation Co ...
- c++各种排序
1.插入排序 void InsertSort(int a[], int n) { int temp, i, j; ; i < n; i++) { ]) { temp = a[i]; ; j &g ...
- 【狼窝乀野狼】Excel那些事儿
在工作中我们常常遇到Excel表格,不管是数据的导入导出,还是财务统计什么都,都离不开Excel,Excel是我见过的最牛逼的一个软件(可能我的见识少)没有之一:如果你只停留在Excel处理数据,统计 ...
- 微信消息处理JAXP-dom解析
package cn.lihainan.test; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import ...
- MVC下用C#实现Excel导出
Aspx页面脚本: function exportxls() { window.open("/Common/HomeExport?startdate=" + $("#hi ...
- Asp.net 同时下载多个文件
整理自网络 下载思路是首先把多个文件进行压缩,然后再下载压缩成的压缩包 引用文件dll:ICSharpCode.SharpZipLib.dll 1. 合成下载文件夹 Protected Sub btn ...