- N +

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

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

导读:

1、.gz文件是linux下常见的压缩格式。使用?java.util.zip.GZIPInputStream即可,压缩是 java.util.zip.GZIPOutp...

文章目录 [+]

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;


本文标题:java解压缩.gz .zip .tar.gz等格式的压缩包方法总结
本文链接:http://www.kyjszj.com/wdzl/178.html
作者授权:除特别说明外,本文由?开源技术之家?原创编译并授权?开源技术之家?刊载发布。
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。

有好的文章希望我们帮助分享和推广,猛戳这里我要投稿

返回列表
上一篇:
下一篇:

发表评论中国互联网举报中心

快捷回复:

    评论列表 (暂无评论,共741人参与)参与讨论

    还没有评论,来说两句吧...