java解压缩.gz .zip .tar.gz等格式的压缩包方法总结
来源:互联网 发布:gephi源码构建 编辑:程序博客网 时间:2024/05/22 01:59
1、.gz文件是linux下常见的压缩格式。使用 java.util.zip.GZIPInputStream即可,压缩是 java.util.zip.GZIPOutputStream
1 public static void unGzipFile(String sourcedir) { 2 String ouputfile = ""; 3 try { 4 //建立gzip压缩文件输入流 5 FileInputStream fin = new FileInputStream(sourcedir); 6 //建立gzip解压工作流 7 GZIPInputStream gzin = new GZIPInputStream(fin); 8 //建立解压文件输出流 9 ouputfile = sourcedir.substring(0,sourcedir.lastIndexOf('.'));10 ouputfile = ouputfile.substring(0,ouputfile.lastIndexOf('.'));11 FileOutputStream fout = new FileOutputStream(ouputfile); 12 13 int num;14 byte[] buf=new byte[1024];15 16 while ((num = gzin.read(buf,0,buf.length)) != -1)17 { 18 fout.write(buf,0,num); 19 }20 21 gzin.close(); 22 fout.close(); 23 fin.close(); 24 } catch (Exception ex){ 25 System.err.println(ex.toString()); 26 } 27 return;28 }
2、zip文件,使用java.util.zip.ZipEntry 和 java.util.zip.ZipFile
1 /** 2 * 解压缩zipFile 3 * @param file 要解压的zip文件对象 4 * @param outputDir 要解压到某个指定的目录下 5 * @throws IOException 6 */ 7 public static void unZip(File file,String outputDir) throws IOException { 8 ZipFile zipFile = null; 9 10 try { 11 Charset CP866 = Charset.forName("CP866"); //specifying alternative (non UTF-8) charset12 //ZipFile zipFile = new ZipFile(zipArchive, CP866);13 zipFile = new ZipFile(file, CP866); 14 createDirectory(outputDir,null);//创建输出目录 15 16 Enumeration<?> enums = zipFile.entries(); 17 while(enums.hasMoreElements()){ 18 19 ZipEntry entry = (ZipEntry) enums.nextElement(); 20 System.out.println("解压." + entry.getName()); 21 22 if(entry.isDirectory()){//是目录23 createDirectory(outputDir,entry.getName());//创建空目录 24 }else{//是文件 25 File tmpFile = new File(outputDir + "/" + entry.getName()); 26 createDirectory(tmpFile.getParent() + "/",null);//创建输出目录 27 28 InputStream in = null; 29 OutputStream out = null; 30 try{ 31 in = zipFile.getInputStream(entry);; 32 out = new FileOutputStream(tmpFile); 33 int length = 0; 34 35 byte[] b = new byte[2048]; 36 while((length = in.read(b)) != -1){ 37 out.write(b, 0, length); 38 } 39 40 }catch(IOException ex){ 41 throw ex; 42 }finally{ 43 if(in!=null) 44 in.close(); 45 if(out!=null) 46 out.close(); 47 } 48 } 49 } 50 51 } catch (IOException e) { 52 throw new IOException("解压缩文件出现异常",e); 53 } finally{ 54 try{ 55 if(zipFile != null){ 56 zipFile.close(); 57 } 58 }catch(IOException ex){ 59 throw new IOException("关闭zipFile出现异常",ex); 60 } 61 } 62 } 63 64 /** 65 * 构建目录 66 * @param outputDir 67 * @param subDir 68 */ 69 public static void createDirectory(String outputDir,String subDir){ 70 File file = new File(outputDir); 71 if(!(subDir == null || subDir.trim().equals(""))){//子目录不为空 72 file = new File(outputDir + "/" + subDir); 73 } 74 if(!file.exists()){ 75 if(!file.getParentFile().exists())76 file.getParentFile().mkdirs();77 file.mkdirs(); 78 } 79 }
3、.tar.gz文件可以看做先用tar打包,再使用gz进行压缩。
使用org.apache.tools.tar.TarEntry; org.apache.tools.tar.TarInputStream 和 org.apache.tools.tar.TarOutputStream
1 //------------------------------------------------------------------------------------------------------ 2 /** 3 * 解压tar.gz 文件 4 * @param file 要解压的tar.gz文件对象 5 * @param outputDir 要解压到某个指定的目录下 6 * @throws IOException 7 */ 8 public static void unTarGz(File file,String outputDir) throws IOException{ 9 TarInputStream tarIn = null; 10 try{ 11 tarIn = new TarInputStream(new GZIPInputStream( 12 new BufferedInputStream(new FileInputStream(file))), 13 1024 * 2); 14 15 createDirectory(outputDir,null);//创建输出目录 16 17 TarEntry entry = null; 18 while( (entry = tarIn.getNextEntry()) != null ){ 19 20 if(entry.isDirectory()){//是目录21 entry.getName();22 createDirectory(outputDir,entry.getName());//创建空目录 23 }else{//是文件24 File tmpFile = new File(outputDir + "/" + entry.getName()); 25 createDirectory(tmpFile.getParent() + "/",null);//创建输出目录 26 OutputStream out = null; 27 try{ 28 out = new FileOutputStream(tmpFile); 29 int length = 0; 30 31 byte[] b = new byte[2048]; 32 33 while((length = tarIn.read(b)) != -1){ 34 out.write(b, 0, length); 35 } 36 37 }catch(IOException ex){ 38 throw ex; 39 }finally{ 40 41 if(out!=null) 42 out.close(); 43 } 44 }45 } 46 }catch(IOException ex){ 47 throw new IOException("解压归档文件出现异常",ex); 48 } finally{ 49 try{ 50 if(tarIn != null){ 51 tarIn.close(); 52 } 53 }catch(IOException ex){ 54 throw new IOException("关闭tarFile出现异常",ex); 55 } 56 } 57 }
使用到的包头有:
1 import java.io.BufferedInputStream; 2 import java.io.File; 3 import java.io.FileInputStream; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.io.InputStream; 7 import java.io.OutputStream; 8 9 import java.nio.charset.Charset;10 import java.util.Enumeration;11 import java.util.zip.GZIPInputStream;12 import java.util.zip.ZipEntry;13 import java.util.zip.ZipFile;14 15 import org.apache.tools.tar.TarEntry; 16 import org.apache.tools.tar.TarInputStream; 17 import org.apache.tools.tar.TarOutputStream;
阅读全文
0 0
- java解压缩.gz .zip .tar.gz等格式的压缩包方法总结
- java解压缩.gz .zip .tar.gz等格式的压缩包方法总结
- 用SSH压缩和解压zip,gz,.tar.gz等格式的正确方法
- linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结(tar包解压)
- linux下tar.gz、tar、zip等解压缩、压缩命令
- linux下tar.gz、tar、zip等解压缩、压缩命令
- linux下tar.gz、tar、zip等解压缩、压缩命令
- 7zip解压tar.gz格式的压缩包
- Linux下tar.gz、tar、bz2、zip等格式解压缩、压缩命令小结
- 通过SSH 解压缩 .tar.gz .gz .zip 文件的方法
- linux下各种格式的压缩包的压缩、解压方法(tar.gz,bz2等)
- linux tar.gz zip 解压缩 压缩命令
- Linux tar.gz zip 解压缩/压缩命令
- linux tar.gz zip 解压缩 压缩命令
- linux tar.gz zip 解压缩 压缩命令
- linux tar.gz zip 解压缩 压缩命令
- linux tar.gz zip 解压缩 压缩命令
- linux tar.gz zip 解压缩 压缩命令
- unit4
- my sql
- Spring MVC框架搭建(二)
- IDEA中NoClassDefFoundError和ClassNotFoundException
- ionic侧滑加上拉刷新
- java解压缩.gz .zip .tar.gz等格式的压缩包方法总结
- BannerImageLoader的自动轮播
- 电路模块设计合集
- MySQL触发器使用详解(转载)
- BP神经网络数学原理及推导过程
- zynq amp Linux+bare裸跑代码中不能响应irq61中断
- 数学建模
- Mac中virtualbox安装windows识别U盘
- 几道经典的数据结构算法代码实现(2)