java获取递归获取嵌套压缩包(zip和rar)中的所有文件

   作者:张昌昌

为了获取一个压缩包中的文件,而该压缩包里可能又含有压缩包 、文件夹、文件夹里又包含压缩包、文件等各种嵌套的情况,采用广度优先遍历和深度优先遍历的方法解决了此问题。

public static List<File> getFilesOfZipAndRar(String zipPath) throws IOException

{

String destPath = zipPath.substring(0,zipPath.lastIndexOf(".")) + "/";

//先将该压缩文件解压

if(zipPath.contains(".zip"))

unZipFile(new File(zipPath),destPath);

if(zipPath.contains(".rar"))

unRarFile(new File(zipPath),destPath);

//进入解压目录,将该目录的所有zip都解压

recursiveCompressedFile(new File(destPath));

//得到该目录下的所有文件

Iterator iterator = Directory.walk(destPath).iterator();

List<File> files = new ArrayList<File>();

File file = null;

while(iterator.hasNext())

{

file = (File)iterator.next();

if(file.getName().contains(".rar"))

continue;

files.add(file);

}

return files;

}

public static void recursiveCompressedFile(File file) throws IOException

{

//广度优先遍历

for(File e:file.listFiles())

{

String filePath = e.getAbsolutePath().replace("\\\\","/");

//深度优先遍历

if(e.getName().contains(".zip"))

{

String desString = filePath.substring(0,filePath.lastIndexOf("."))+"/";

unZipFile(e,desString);

e.delete();

recursiveCompressedFile(new File(desString));

}

if(e.getName().contains(".rar"))

{

String desString = filePath.substring(0,filePath.lastIndexOf("."))+"/";

unRarFile(e,desString);

e.delete();

recursiveCompressedFile(new File(desString));

}

if(e.isDirectory())

recursiveCompressedFile(e);

}

}

总结:该问题的解决过程中学习了:(1)广度优先和深度优先的策略;(2)递归调用的方法;(3)如何解压文件

转载请说明出处。

时间: 2024-10-12 17:22:05

java获取递归获取嵌套压缩包(zip和rar)中的所有文件的相关文章

[Java基础] 深入jar包:从jar包中读取资源文件

转载: http://hxraid.iteye.com/blog/483115?page=3#comments 我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等).在单独运行的时候这些简单的处理当然不会有问题.但是,如果我们把代码打成一个jar包以后,即使将资源文件一并打包,这些东西也找不出来了.看看下面的代码: //源代码1: package edu.hxraid; import java.io.*; public class Resource { public void getRe

java 使用递归获取指定文件路径目录,删除指定的文件后缀(可扩展,根据具体需要的删除的后缀进行配置)~~

在工作开发过程中,每次用SVN提交代码全选择的时候,发现会产生很多不需要的文件后缀垃圾文件,感觉挺烦人的,一个一个删太麻烦了,如果产生多种后缀文件时,那删起来多费劲,是吧?想想,就写了一段程序通过递归进行处理,虽然网上有很多这样的代码,但是我感觉都有问题,网上的代码很多都需要拿过来执行一下才知道有没有问题,如果是多层目录结构的时候,会把你的相同文件名称也干掉,而我写的这个即使是需要删除的文件后缀名称跟文件名一样都不会删掉.每次提交之前我都执行一下再提交,这样就不会有哪些不需要的后缀文件了.这个还

java 从jar包中读取资源文件

在代码中读取一些资源文件(比如图片,音乐,文本等等),在集成环境(Eclipse)中运行的时候没有问题.但当打包成一个可执行的jar包(将资源文件一并打包)以后,这些资源文件找不到,如下代码:Java代码 [java] view plaincopy //源代码1: package edu.hxraid; import java.io.*; public class Resource { public  void getResource() throws IOException{ File fil

(转)java 从jar包中读取资源文件

(转)java 从jar包中读取资源文件 博客分类: java 源自:http://blog.csdn.net/b_h_l/article/details/7767829 在代码中读取一些资源文件(比如图片,音乐,文本等等),在集成环境(Eclipse)中运行的时候没有问题.但当打包成一个可执行的jar包(将资源文件一并打包)以后,这些资源文件找不到,如下代码:Java代码 [java] view plaincopy //源代码1: package edu.hxraid; import java

【转】linux解压zip和rar

1)对于.zip linux下提供了zip和unzip程序,只需yum install unzip即可,zip是压缩程序,unzip是解压程序.它们的参数选项很多,这里只做简单介绍,依旧举例说明一下其用法: ? 1 # zip all.zip *.jpg 这条命令是将所有.jpg的文件压缩成一个zip包 ? 1 # unzip all.zip 这条命令是将all.zip中的所有文件解压出来 2)对于.rar 要在linux下处理.rar文件,需要安装RAR for Linux,可以从网上下载,但

Java 递归获取一个路径下的所有文件,文件夹名称

package com.readfile; import java.io.File; public class GetAllFiles { public static void main(String[] args) { //路径 这里写一个路径进去 String path="F:\\QQ文档"; //调用方法 getFiles(path); } /** * 递归获取某路径下的所有文件,文件夹,并输出 */ public static void getFiles(String path

Java非递归的方式获取目录中所有文件(包括目录)

零.思路解析 对于给出的文件查看其下面的所有目录,将这个目录下的所有目录放入待遍历的目录集合中,每次取出该集合中的目录遍历,如果是目录再次放入该目录中进行遍历. 一.代码 /** * 非递归的方式获取目录中的所有文件<br> * 此方法获取的路径未按照目录->文件方式排列 * * @param dirPath 目录路径 * @return 指定目录下所有文件和目录的集合 */ public static List<File> listAllFile(String dirPat

获取 id parentId 递归获取所有

Declare @Id Int Set @Id = 5;    ---在此修改父节点  With RootNodeCTE(Id,ParentId)  As (  Select Id,ParentId From BOM Where ParentId In (@Id)  Union All Select BOM.Id,BOM.ParentId From RootNodeCTE  Inner Join BOM On RootNodeCTE.Id = BOM.ParentId  )  Select * 

java使用siger 获取服务器硬件信息(CPU 内存 网络 io等)

通过使用第三方开源jar包sigar.jar我们可以获得本地的信息 1.下载sigar.jar sigar官方主页 sigar-1.6.4.zip 2.按照主页上的说明解压包后将相应的文件copy到java路径.比如windows32位操作系统需要将lib中sigar-x86-winnt.dll文件拷贝到java SDK目录的bin内 参考官方主页上的配置项. File Language Description Required sigar.jar Java Java API Yes (for