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) charset 12 //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;
