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 ...
随机推荐
- c++内存分配
[导语] 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不 ...
- mysql查询差集
select A.* from A left join B using(name,addr,age) where B.name is NULL; select A.* from A left join ...
- iOS 进阶 第四天(0329)
0329 UIScrollView的常见属性及其解释 常见属性,如下图: 具体解释,如下图: 喜马拉雅设置的例子 代码: 效果
- LintCode-Word Segmentation
Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separa ...
- WPF解析Fnt字体
偶遇需要再 WPF中加载Fnt字体,此做... using System; using System.Collections.Generic; using System.Drawing; using ...
- Pentaho Data Integration笔记 (一):安装
介绍 Pentaho Data Integration (PDI) is an extract, transform, and load (ETL) solution that uses an inn ...
- 团队项目-smart原则
Smart原则 Specific ——明确性 所谓明确就是要用具体的语言清楚地说明要达成的行为标准.明确的目标几乎是所有成功团队的一致特点.很多团队不成功的重要原因之一就因为目标定的模棱两可,或没有将 ...
- tar命令,转来等用
tar 解压缩命令 tar -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令 ...
- IntelliJ IDEA 14 利用JRebel实现热部署 二
前言:今天下午和一个qq群里讨论JRebel时,忽然得到“自动部署”的奥秘--真有听君一席话,胜读十年书的感悟. 这是此群友的热部署博客:http://blog.csdn.net/martinkey/ ...
- The service ‘xxx’ configured for WCF is not registered with the Autofac container
最近在使用autofac.wcf时,报如下异常: Exception Details: System.InvalidOperationException: The service 'xxx' conf ...