7z解压缩软件(7z的压缩文件怎么解压)

提醒:文章中有些片段好像代码很多。事实上,只有少数真正有用的代码可以移除trycatch并释放资源。其实解压很简单。主要是用心观察,顺着葫芦画瓢。

首先,写一个类似于辅助的视图类。

如果想学Java工程,高性能和分布式,很容易理解。微服,Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135。群里有阿里牛大的现场讲解技术,还有Java的大型互联网技术的免费视频分享。

1公共枚举文件类型{2 //unknown 3 unknown,4 //压缩文件\ n5zip,rar,_ 7z,tar,gz,tar _ gz,bz2,tar _ bz2,\ n6//位图文件\ n7bmp,png,jpg 8//矢量图片文件9 SVG,10当然也可以直接用字符串表示这个类,不用写。

然后,我还写了一个方法来获取文件的真实类型。

为什么要写这个方法?因为,我们可以直接修改文件的后缀,这是很危险的!

1 \u3000\u3000/** 2 *获取文件的真实类型3 * 4 * @param file要获取的文件类型。\ n5 * @返回文件类型的枚举。6 */7私有静态文件类型getFileType(FileFile){ \ n 8 file InputStream InputStream=null;\ n9 try { \ n10 inputStream=new file inputStream(file);1 byte [] head=新字节[4];\ n12if(-1==inputstream . read(head)){ \ n13返回文件类型。未知;\ n14 } \ n15 int head hex=0;6for(字节b :头){ \ n17 head hex=8;\ n18六角头|=b;10} 20 switch (headhex)返回文件类型。ZIP23案件0x776f7264:24退回FileType.TAR;5case-0x51:26返回文件类型。_ 7Z;27 Case0x425a6839:28返回文件类型。BZ2;9case-0x74f7F8336030返回FileType.GZ;3案例0x52617221:32返回FileType.RAR;3默认值:34返回文件类型。未知;35 }36 }catch(异常e){ \ n37 e . print stack trace();\ n38}最后{39}尝试{40 if(inputStream!=null){ \ n41输入流。close();\ n42 } \ n43 } catch(io异常e){ \ n44 e . printstacktrace();45 }46 }47返回文件类型。未知;\ N48} \此处通过文件头信息判断是什么类型。此处不会显示其他文件的标题信息。如有必要,您可以运行这些文件来查看headHex值是多少。

最后,还有一个创建目录的辅助方法。

如果想学Java工程,高性能和分布式,很容易理解。微服,Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135。群里有阿里牛大的现场讲解技术,还有Java的大型互联网技术的免费视频分享。

1 \u3000\u3000/** 2 *构建目录3 * @param outputDir输出目录4 * @param subDir子目录\ n5 */\ n6私有静态void创建目录(string outputdir,string subDir){ \ n7 file file=new file(output dir)\ n8if(!(subdir==null || subdir.trim().Equals(‘){//子目录不为空\ n9 file=new file(output dir file . separator subdir);10 }11 if(!file.exists()){12 if(!file.getParentFile().exists()){ \ n13文件。获取父文件().mkdirs();\ n14 } \ n15文件。mkdirs();16 }17 }

Tar文件解压缩

接下来就是正经菜了。我们先来看看如何解压tar文件。

幸运的是,它附带了一个提取tar文件的工具JDK。参见下面的代码:

1 \u3000/** 2 *解压缩tar文件3 * @param file压缩包文件4 * @param targetPath目标文件夹5 * @param delete解压缩后是否要删除原压缩包文件6 */7 private static void压缩tar(

File file, String targetPath, boolean delete){ 8 FileInputStream fis = null; 9 OutputStream fos = null;10 TarInputStream tarInputStream = null;11 try {12 fis = new FileInputStream(file);13 tarInputStream = new TarInputStream(fis, 1024 * 2);14 // 创建输出目录15 createDirectory(targetPath, null);16 17 TarEntry entry = null;18 while(true){19 entry = tarInputStream.getNextEntry();20 if( entry == null){21 break;22 }23 if(entry.isDirectory()){24 createDirectory(targetPath, entry.getName()); // 创建子目录25 }else{26 fos = new FileOutputStream(new File(targetPath + File.separator + entry.getName()));27 int count;28 byte data[] = new byte[2048];29 while ((count = tarInputStream.read(data)) != -1) {30 fos.write(data, 0, count);31 }32 fos.flush();33 }34 }35 } catch (IOException e) {36 e.printStackTrace();37 }finally {38 try {39 if(fis != null){40 fis.close();41 }42 if(fos != null){43 fos.close();44 }45 if(tarInputStream != null){46 tarInputStream.close();47 }48 } catch (IOException e) {49 e.printStackTrace();50 }51 }52 }

有一点需要注意的是:方法参数传了一个是否需要删除原压缩包的参数,如果需要删除的话,必须!必须!必须!等到流关闭了之后才能删除,不然是删不掉的。也可以在该方法的调用者那里删,这样就可以不用传这个参数了。

bz2文件解压

解压bz2文件我这里是用的Apache的commons.compress工具来解压,先下载jar包:commons-compress-1.9.jar,(1.8的貌似有问题,我就换成了1.9)

1 \u3000\u3000/** 2 * 解压缩bz2文件 3 * @param file 压缩包文件 4 * @param targetPath 目标文件夹 5 * @param delete 解压后是否删除原压缩包文件 6 */ 7 public static void decompressBZ2(File file, String targetPath, boolean delete){ 8 FileInputStream fis = null; 9 OutputStream fos = null;10 BZip2CompressorInputStream bis = null;11 String suffix = “.bz2”;12 try {13 fis = new FileInputStream(file);14 bis = new BZip2CompressorInputStream(fis);15 // 创建输出目录16 createDirectory(targetPath, null);17 File tempFile = new File(targetPath + File.separator + file.getName().replace(suffix, “”));18 fos = new FileOutputStream(tempFile);19 20 int count;21 byte data[] = new byte[2048];22 while ((count = bis.read(data)) != -1) {23 fos.write(data, 0, count);24 }25 fos.flush();26 } catch (IOException e) {27 e.printStackTrace();28 }finally {29 try {30 if(fis != null){31 fis.close();32 }33 if(fos != null){34 fos.close();35 }36 if(bis != null){37 bis.close();38 }39 } catch (IOException e) {40 e.printStackTrace();41 }42 }43 }

tar.bz2文件解压

1 \u3000\u3000/** 2 * 解压缩tar.bz2文件 3 * @param file 压缩包文件 4 * @param targetPath 目标文件夹 5 * @param delete 解压后是否删除原压缩包文件 6 */ 7 public static void decompressTarBz2(File file, String targetPath, boolean delete){ 8 FileInputStream fis = null; 9 OutputStream fos = null;10 BZip2CompressorInputStream bis = null;11 TarInputStream tis = null;12 try {13 fis = new FileInputStream(file);14 bis = new BZip2CompressorInputStream(fis);15 tis = new TarInputStream(bis, 1024 * 2);16 // 创建输出目录17 createDirectory(targetPath, null);18 TarEntry entry;19 while((entry = tis.getNextEntry()) != null){20 if(entry.isDirectory()){21 createDirectory(targetPath, entry.getName()); // 创建子目录22 }else{23 fos = new FileOutputStream(new File(targetPath + File.separator + entry.getName()));24 int count;25 byte data[] = new byte[2048];26 while ((count = tis.read(data)) != -1) {27 fos.write(data, 0, count);28 }29 fos.flush();30 }31 }32 } catch (IOException e) {33 e.printStackTrace();34 }finally {35 try {36 if(fis != null){37 fis.close();38 }39 if(fos != null){40 fos.close();41 }42 if(bis != null){43 bis.close();44 }45 if(tis != null){46 tis.close();47 }48 } catch (IOException e) {49 e.printStackTrace();50 }51 }52 }

tar.gz文件解压

如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。

1 \u3000\u3000/** 2 * 解压缩tar.gz文件 3 * @param file 压缩包文件 4 * @param targetPath 目标文件夹 5 * @param delete 解压后是否删除原压缩包文件 6 */ 7 private static void decompressTarGz(File file, String targetPath, boolean delete){ 8 FileInputStream fileInputStream = null; 9 BufferedInputStream bufferedInputStream = null;10 GZIPInputStream gzipIn = null;11 TarInputStream tarIn = null;12 OutputStream out = null;13 try {14 fileInputStream = new FileInputStream(file);15 bufferedInputStream = new BufferedInputStream(fileInputStream);16 gzipIn = new GZIPInputStream(bufferedInputStream);17 tarIn = new TarInputStream(gzipIn, 1024 * 2);18 19 // 创建输出目录20 createDirectory(targetPath, null);21 22 TarEntry entry = null;23 while((entry = tarIn.getNextEntry()) != null){24 if(entry.isDirectory()){ // 是目录25 createDirectory(targetPath, entry.getName()); // 创建子目录26 }else{ // 是文件27 File tempFIle = new File(targetPath + File.separator + entry.getName());28 createDirectory(tempFIle.getParent() + File.separator, null);29 out = new FileOutputStream(tempFIle);30 int len =0;31 byte[] b = new byte[2048];32 33 while ((len = tarIn.read(b)) != -1){34 out.write(b, 0, len);35 }36 out.flush();37 }38 }39 } catch (IOException e) {40 e.printStackTrace();41 }finally {42 try {43 if(out != null){44 out.close();45 }46 if(tarIn != null){47 tarIn.close();48 }49 if(gzipIn != null){50 gzipIn.close();51 }52 if(bufferedInputStream != null){53 bufferedInputStream.close();54 }55 if(fileInputStream != null){56 fileInputStream.close();57 }58 } catch (IOException e) {59 e.printStackTrace();60 }61 }62 }

gz文件解压

1 \u3000\u3000/** 2 * 解压缩gz文件 3 * @param file 压缩包文件 4 * @param targetPath 目标文件夹 5 * @param delete 解压后是否删除原压缩包文件 6 */ 7 private static void decompressGz(File file, String targetPath, boolean delete){ 8 FileInputStream fileInputStream = null; 9 GZIPInputStream gzipIn = null;10 OutputStream out = null;11 String suffix = “.gz”;12 try {13 fileInputStream = new FileInputStream(file);14 gzipIn = new GZIPInputStream(fileInputStream);15 // 创建输出目录16 createDirectory(targetPath, null);17 18 File tempFile = new File(targetPath + File.separator + file.getName().replace(suffix, “”));19 out = new FileOutputStream(tempFile);20 int count;21 byte data[] = new byte[2048];22 while ((count = gzipIn.read(data)) != -1) {23 out.write(data, 0, count);24 }25 out.flush();26 } catch (IOException e) {27 e.printStackTrace();28 }finally {29 try {30 if(out != null){31 out.close();32 }33 if(gzipIn != null){34 gzipIn.close();35 }36 if(fileInputStream != null){37 fileInputStream.close();38 }39 } catch (IOException e) {40 e.printStackTrace();41 }42 }43 }

7z文件解压

1 /** 2 * 解压缩7z文件 3 * @param file 压缩包文件 4 * @param targetPath 目标文件夹 5 * @param delete 解压后是否删除原压缩包文件 6 */ 7 private static void decompress7Z(File file, String targetPath, boolean delete){ 8 SevenZFile sevenZFile = null; 9 OutputStream outputStream = null;10 try {11 sevenZFile = new SevenZFile(file);12 // 创建输出目录13 createDirectory(targetPath, null);14 SevenZArchiveEntry entry;15 16 while((entry = sevenZFile.getNextEntry()) != null){17 if(entry.isDirectory()){18 createDirectory(targetPath, entry.getName()); // 创建子目录19 }else{20 outputStream = new FileOutputStream(new File(targetPath + File.separator + entry.getName()));21 int len = 0;22 byte[] b = new byte[2048];23 while((len = sevenZFile.read(b)) != -1){24 outputStream.write(b, 0, len);25 }26 outputStream.flush();27 }28 }29 } catch (IOException e) {30 e.printStackTrace();31 }finally {32 try {33 if(sevenZFile != null){34 sevenZFile.close();35 }36 if(outputStream != null){37 outputStream.close();38 }39 } catch (IOException e) {40 e.printStackTrace();41 }42 }43 }

rar文件解压

先下载jar包:junrar-0.7.jar、xz-1.5.jar、commons-logging.jar

如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。

1 \u3000\u3000/** 2 * 解压缩RAR文件 3 * @param file 压缩包文件 4 * @param targetPath 目标文件夹 5 * @param delete 解压后是否删除原压缩包文件 6 */ 7 private static void decompressRAR(File file, String targetPath, boolean delete){ 8 Archive archive = null; 9 OutputStream outputStream = null;10 try {11 archive = new Archive(file);12 FileHeader fileHeader;13 // 创建输出目录14 createDirectory(targetPath, null);15 while( (fileHeader = archive.nextFileHeader()) != null){16 if(fileHeader.isDirectory()){17 createDirectory(targetPath, fileHeader.getFileNameString().trim()); // 创建子目录18 }else{19 outputStream = new FileOutputStream(new File(targetPath + File.separator + fileHeader.getFileNameString().trim()));20 archive.extractFile(fileHeader, outputStream);21 }22 }23 } catch (RarException | IOException e) {24 e.printStackTrace();25 }finally {26 try {27 if(archive != null){28 archive.close();29 }30 if(outputStream != null){31 outputStream.close();32 }33 } catch (IOException e) {34 e.printStackTrace();35 }36 }37 }

需要更多“Java”资料的同学在后台私信回复关键词“666”获取一份精品Java架构资料