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 ...
随机推荐
- ORACLE AWR 和 ASH
一.关于ASH 我们都知道,用户在 ORACLE 数据库中执行操作时,必然要创建相应的连接和会话, 其中,所有当前的会话信息都保存在动态性能视图 V$SESSION 中,通过该视图,DBA 可 以查看 ...
- 在Centos7上安装漏洞扫描软件Nessus
本文摘要:简单叙述了在Centos7上安装Nessus扫描器的过程 Nessus 是目前全世界最多人使用的系统漏洞扫描与分析软件,Nessus的用户界面是基于Web界面来访问Nessus漏洞扫描器 ...
- Python开发【第一篇】Python基础之反射
反射 反射的作用:反射得作用是提高代码可读行. __import__导入模块和import导入模块的区别: __import__导入模块是通过字符串进行导入. import是常用得导入模块方法. 扩展 ...
- RDD的转换操作---RDD转换过程
1) union(otherRDD)RDD-->UnionRDD2) groupByKey(numPartitions)RDD-->ShuffledRDD-->MapPartitio ...
- c++中string类的详解
,<时返回-1,==时返回0 string的子串:string substr(int pos = 0,int n = npos) const;//返回pos开始的n个字符组成的字符串strin ...
- cdev成员结构体file_operations文件操作结构的分析
struct file_operations{ struct module *owner; // 指向拥有该结构的模块的指针,避免正在操作时被卸载,一般为初始化为THIS_MODULES loff_t ...
- mysql 查询
查询数据:select s_name from student limit 1;//限制数量 select * from student where s_id in (select s_id from ...
- iOS开发网络篇—大文件的多线程断点下载(转)
http://www.cnblogs.com/wendingding/p/3947550.html iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了 ...
- eclipse下如何关联android-support-v4.jar源码
一.首先导入jar包 如果android-support-v4.jar包在libs目录下,先将它移除.然后点选中项目右键 --->properties-->javabuildpath--& ...
- 清除SQL Server执行计划
有时需要调试SQL语句的性能, 需要不断的执行SQL语句, 可是多次执行同一条语句的时候,SQL Server 会缓存表的数据,结果就测不出来 实际的 SQL 的性能 用以下SQL可以清除缓存数据 D ...