java里怎么解压tar.gz文件啊,网上好多例子都不行

Python010

java里怎么解压tar.gz文件啊,网上好多例子都不行,第1张

最后怎么解决的,我现在也遇到这个问题了,单个文件可以解压可以压缩,写入的测试内容也在,换成文件夹就不行了。能找到的案例全都是解压成文件,但是本身是个文件夹的GZ包解压了以后也打不开。

java解压缩.gz .zip .tar.gz等格式的压缩包方法总结

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

//引入jtar-(版本号).jar

public void readtar() throws IOException{

    String tarFile = "D:/20120725.tar.gz"

    String destFolder = "D:/20120725"

    File ss=new File(tarFile)

    TarInputStream tis = null

    tis = new TarInputStream(new GZIPInputStream(new BufferedInputStream(new FileInputStream(ss))))

    TarEntry entry

    try{

        while((entry = tis.getNextEntry()) != null) {

            int count

            byte data[] = new byte[204800]

            FileOutputStream fos = new FileOutputStream(new File(destFolder + "/" + entry.getName()))

            BufferedOutputStream dest = new BufferedOutputStream(fos)

            while((count = tis.read(data)) != -1) {

                dest.write(data, 0, count)

            }

            dest.flush()

            dest.close()

        }

        tis.close()

    } catch (FileNotFoundException e) {

        e.printStackTrace()

    } catch (IOException e) {

        e.printStackTrace()

    }

}