`
sunlifan05
  • 浏览: 71487 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

获取zip包内的目录和文件名

阅读更多
java 代码
 
  1. import java.io.IOException;   
  2. import java.util.ArrayList;   
  3. import java.util.Enumeration;   
  4. import java.util.List;   
  5. import java.util.StringTokenizer;   
  6.   
  7. import org.apache.tools.zip.ZipEntry;   
  8. import org.apache.tools.zip.ZipFile;   
  9.   
  10.   
  11. public class ZipSearch {   
  12.   
  13.     /**  
  14.      * @param args  
  15.      * @coding by sunlifan at 2007.7.25  
  16.      */  
  17.     private List list = new ArrayList();   
  18.   
  19.     public List zipLibSearch(String rootName, int searchlibNum) {   
  20.   
  21.         ZipFile slf_file = null;   
  22.         try {   
  23.             slf_file = new ZipFile(rootName);   
  24.         } catch (Exception e) {   
  25.             // TODO: handle exception   
  26.         }   
  27.         Enumeration e = slf_file.getEntries();   
  28.         while (e.hasMoreElements()) {   
  29.             ZipEntry slf_zipEntry = (ZipEntry) e.nextElement();   
  30.             if (slf_zipEntry.isDirectory()) {   
  31.                 StringTokenizer st = new StringTokenizer(slf_zipEntry.getName(),   
  32.                         "/");   
  33.                    
  34.                 int k = st.countTokens();   
  35.                    
  36.                 if (k >= 1) {   
  37.                     List slf_temp = new ArrayList();   
  38.                     while (st.hasMoreTokens()) {   
  39.                            
  40.                         slf_temp.add(st.nextToken());   
  41.                     }   
  42.                        
  43.                     if (slf_temp.size() > searchlibNum) {   
  44.                         if (list.contains(slf_temp.get(searchlibNum)) == false) {   
  45.                             list.add(slf_temp.get(searchlibNum));   
  46.                                
  47.                         }   
  48.                     }   
  49.                        
  50.                 }   
  51.             } else {   
  52.                 if (slf_zipEntry.getSize() < 10240) {   
  53.                     System.out.println("压缩包内的文件大小不符合规范");   
  54.                     try {   
  55.                         slf_file.close();   
  56.                     } catch (IOException e1) {   
  57.                         // TODO 自动生成 catch 块   
  58.                         e1.printStackTrace();   
  59.                     }   
  60.                     return null;   
  61.                 }   
  62.             }   
  63.   
  64.         }   
  65.         try {   
  66.             slf_file.close();   
  67.         } catch (IOException e1) {   
  68.             // TODO 自动生成 catch 块   
  69.             e1.printStackTrace();   
  70.         }   
  71.         return list;   
  72.     }   
  73.     public List getZipFile(String rootName)   
  74.     {   
  75.         ZipFile slf_zipFile=null;   
  76.         try {   
  77.             slf_zipFile=new ZipFile(rootName);   
  78.         } catch (IOException e) {   
  79.             // TODO 自动生成 catch 块   
  80.             e.printStackTrace();   
  81.         }   
  82.         Enumeration e=slf_zipFile.getEntries();   
  83.         while(e.hasMoreElements())   
  84.         {   
  85.             ZipEntry slf_zipEntry=(ZipEntry)e.nextElement();   
  86.             if(!slf_zipEntry.isDirectory())   
  87.             {   
  88.                 String filename=slf_zipEntry.getName().substring(slf_zipEntry.getName().lastIndexOf("/")+1, slf_zipEntry.getName().length());   
  89.                 list.add(filename);   
  90.             }   
  91.         }   
  92.         return list;   
  93.     }   
  94. }  

list中存放根目录下每一级的目录名,通过searchlibNum参数可获取想要的那一级目录的全部文件夹名

此方法并对根目录下所有文件的大小进行了匹对

下面是匹对的方法:

目录比对

java 代码
  1. public List compare(List list, int userIndex, List fileList) {   
  2.         List slf_noTreeList = new ArrayList();   
  3.         String[] all=(String[]) list.get(userIndex);   
  4.         List slf_hasTreeList = new ArrayList();   
  5.         for (int userIndex2 = 0; userIndex2 < all.length; userIndex2++)   
  6.             getUserLib: {   
  7.                 for (int fileTree = 0; fileTree < fileList.size(); fileTree++) {   
  8.                     // 获取文件包中的目录   
  9.                     if (fileList.get(fileTree).toString().matches(   
  10.                             all[userIndex2])) {   
  11.                            
  12.                         fileList.remove(all[userIndex2]);// 如果目录与用户的要求匹配,则下面不需再匹配这个目录   
  13.                         slf_hasTreeList.add(all[userIndex2]);   
  14.                         break getUserLib;   
  15.   
  16.                     } else {   
  17.                         if (slf_noTreeList.contains(all[userIndex2]) == false) {   
  18.                             slf_noTreeList.add(all[userIndex2]);   
  19.   
  20.                         }   
  21.   
  22.                     }   
  23.                 }   
  24.             }   
  25.   
  26.         for (int i = 0; i < slf_hasTreeList.size(); i++) {   
  27.             if (slf_noTreeList.contains(slf_hasTreeList.get(i))) {   
  28.                 slf_noTreeList.remove(slf_hasTreeList.get(i));   
  29.   
  30.             }   
  31.         }   
  32.         return slf_noTreeList;   
  33.     }  

文件名比对

 

java 代码
  1. public List fileNameCheck(String[] fileName, String fileRoot) {   
  2.         List slf_dirFilesList = new ArrayList();   
  3.         List slf_fileList=new ArrayList();   
  4.         slf_fileList=zipSearch.getZipFile(fileRoot);   
  5.         String str = null;   
  6.         for (int i = 0; i < fileName.length; i++) {   
  7.             if (slf_fileList.contains(fileName[i]) == false) {   
  8.                 str = fileName[i] + "不存在";   
  9.                 slf_dirFilesList.add(str);   
  10.             }   
  11.         }   
  12.         return slf_dirFilesList;   
  13.     }  

结果集处理:

java 代码
  1. public List SeacherResult(List userInfoSeach, String fileName) {   
  2.         int needTreeNum = userInfoSeach.size();   
  3.         FileCheckTree slf_fileCheckTree = new FileCheckTree();   
  4.         List list = new ArrayList();   
  5.         List resultlist = new ArrayList();   
  6.            
  7.         List slf_noTreeList = new ArrayList();   
  8.                 for (int nowSeachTree = 1; nowSeachTree <= needTreeNum; nowSeachTree++)   
  9.                 b:{   
  10.                                     //System.out.println(needTreeNum);   
  11.                         list = zipSearch.zipLibSearch(fileName, nowSeachTree-1);   
  12.                    
  13.                 if(list!=null)   
  14.                 {   
  15.                        
  16.                     if(list.size()==0)   
  17.                     {   
  18.                         slf_result = "此文件目录不完整,请检查......";   
  19.                         resultlist.add(slf_result);   
  20.                         return resultlist;//fileSeach.fileTreeChoose(fileName, nowSeachTree);   
  21.                     }else{   
  22.                         slf_noTreeList = slf_fileCheckTree.compare(userInfoSeach,nowSeachTree - 1, list);   
  23.                         if (!slf_noTreeList.isEmpty()) {   
  24.                             for (int i = 0; i < slf_noTreeList.size(); i++) {   
  25.                                 slf_result = "第" + nowSeachTree + "层的"+ slf_noTreeList.get(i) + "目录不存在";   
  26.                                 resultlist.add(slf_result);   
  27.                                    
  28.                             }   
  29.                         }   
  30.                         else{   
  31.                             if(nowSeachTree==needTreeNum&&needTreeNum==1)   
  32.                             {   
  33.                                 return null;   
  34.                             }   
  35.                             else{   
  36.                                 resultlist=null;   
  37.                                 break b;   
  38.                             }   
  39.                         }   
  40.                     }   
  41.                 }   
  42.                 else{   
  43.                     slf_result="压缩包内文件大小不符合规范,请检查.......";   
  44.                     resultlist.add(slf_result);   
  45.                     return resultlist;   
  46.                 }   
  47.                    
  48.             }   
  49.             if(resultlist==null)   
  50.             {   
  51.                 return null;   
  52.             }   
  53.             else{   
  54.                 return resultlist;   
  55.             }   
  56.     }  
分享到:
评论
1 楼 luckaway 2008-04-30  
     不错!

相关推荐

    java获取压缩文件的名称并解压

    通过使用`ZipFile`和`ZipEntry`,我们可以方便地获取ZIP文件内的文件名,并结合多线程技术(如`ExecutorService`)来提高解压缩的效率。这样的实现方式使得在处理大量文件时,程序能够更快速、更高效地运行。

    各种获取文件名的方法.zip

    这个"各种获取文件名的方法.zip"压缩包提供了一系列的方法来帮助我们高效地完成这项工作。下面,我们将深入探讨几种主要的获取文件名的策略。 1. **Python编程语言**: Python是一个广泛用于文件操作的编程语言,...

    BAT批处理脚本-文件相关操作-分离路径和文件名.cmd.zip

    例如,`FOR %i IN (%filename%) DO`语句可以用来解析文件名和路径。 在“分离路径和文件名.cmd.txt”中,可能包含以下内容: ```cmd @echo off set "filename=C:\path\to\file.ext" for %%a in ("%filename%") do ...

    读取zip文件,不解压缩直接解析,支持文件名中文,解决内容乱码(还是以支付宝对账单为例)

    然后,通过迭代这个对象,我们可以访问每个条目(即压缩的文件或目录),获取其文件名和内容。关键在于正确处理文件名的编码。在某些情况下,文件名可能以GBK或其他编码存储,这时我们需要进行转换,才能正确显示...

    kettle输出文本文件名设有系统时间组成的动态文件名.zip

    这个步骤将获取当前系统的日期和时间信息。 3. **配置“获取系统时间”**:在“获取系统时间”的设置中,可以指定需要的时间格式,例如"yyyyMMdd_HHmmss",这会生成类似"20230406_153027"的格式,包含了年、月、日...

    python提取一级目录内所有文件名,二级文件夹内的文件不提取.zip

    在Python中,我们可以使用os模块的os.listdir()方法来获取一个目录下的所有文件和文件夹的名称。但是,该方法会返回所有子目录的内容,包括二级文件夹内的文件。如果我们只想提取一级目录内的文件名,不包括任何子...

    将一个目录内的内容打包到zip文件以及将zip文件解压到某个目录(ZipPack).zip

    4. **ZIP文件格式**:ZIP是一种常用的文件归档格式,可以将多个文件和目录打包成一个单一的文件,便于存储和传输。ZIP文件内部包含了一个文件头,记录了每个成员文件的信息,如文件名、压缩方法、时间戳等。zlib库...

    生成当前文件夹下的所有文件名.zip

    在IT行业中,尤其是在系统管理和自动化任务执行的过程中,有时我们需要快速获取特定目录下所有文件的名称。这个场景在处理大量文件时尤其常见,例如日志管理、数据备份或批量操作。标题"生成当前文件夹下的所有...

    取压缩包中全部文件名.rar

    RAR是一种流行的压缩格式,由尤金·罗沙利克开发,它提供了比ZIP更高的压缩率和更高级的功能,如恢复记录以修复损坏的文件。在Windows环境中,我们通常使用WinRAR这样的第三方工具来管理和操作RAR文件。但在编程环境...

    Excel-VBA实用技巧范例-获取文件名.zip

    本压缩包文件“Excel-VBA实用技巧范例-获取文件名.zip”可能包含一系列示例代码和教程,旨在帮助用户掌握如何在VBA中有效地获取和操作文件名。 首先,我们要了解VBA(Visual Basic for Applications)是Microsoft ...

    改名-文件名批量繁体转简体-KRename.zip

    "改名-文件名批量繁体转简体-KRename.zip"就是一个专门解决此类问题的实用工具,它包含了KRenameShell.dll、KRename.exe、KR.exe、KRename.exe.Manifest、Readme.txt、Language和Scripts等多个关键组件,能够帮助...

    Zip文件解析(包含中文目录)

    然而,随着Unicode的普及,现在的Zip文件可以使用UTF-8或其他Unicode编码来保存文件名和目录名,以确保国际化支持。当解析Zip文件时,必须正确识别和处理这些编码,否则可能导致乱码或无法正确解压。 Zip文件的结构...

    actionscript解析zip包

    而Zip是一种常见的文件压缩格式,它允许用户将多个文件和目录打包成一个单一的可压缩文件,便于存储和传输。在Flex开发中,ActionScript可以用来解析和操作Zip文件,以便在Flash应用程序中实现类似的功能。 标题...

    Delphi实现Zip压缩/解压缩

    你可以使用`TZipFile.Create`方法来创建一个新的`TZipFile`实例,然后通过`Add`方法将文件添加到ZIP档案中,或者使用`ExtractToFile`方法将ZIP内的文件解压缩到指定位置。例如: ```delphi uses System.Zip; var ...

    易语言zip解压

    易语言程序可以通过读取这个区段并解析其内容来获取ZIP文件中的所有文件名。 "读取某个ZIP文件"则涉及文件的解压缩过程。找到对应文件在ZIP文件中的位置后,我们需要使用解压缩算法(如DEFLATE)来解码数据块。解压...

    IIS短文件名漏洞利用工具.zip

    2. **发现隐藏目录和文件**:通过短文件名漏洞,可能能访问到服务器上未公开的目录或文件,这可能包含敏感信息。 3. **权限提升**:如果服务器配置错误,攻击者可能利用短文件名漏洞获得更高权限,进而执行任意代码...

    xiaoniaofeifei.zip包

    【描述】"xiaoniaofeifei.zip包"没有提供具体的文件内容描述,但根据文件名,我们可以推测这可能是一个个人或项目的归档,或者包含某种特定的信息。"xiaoniaofeifei"这个标签可能是文件主题或创建者的名字,也可能与...

    JAVA 从压缩包中提取文件

    3. **提取文件**: 虽然示例代码中未实现具体提取文件的功能,但展示了如何获取ZIP文件中的所有条目名称,这为后续实现提取功能打下了基础。 #### 三、关键技术点 ##### 1. 使用`ZipFile`类读取ZIP文件 - **创建...

    批量快速复制文件名.zip

    总的来说,"批量快速复制文件名.zip"是一个旨在提升Windows用户在处理文件名操作效率的实用工具,通过右键菜单集成,简化了复制文件和文件夹名称的过程,对于需要频繁处理文件信息的用户来说,它是一个非常有价值的...

    取压缩包中全部文件名.zip易语言项目例子源码下载

    2. 遍历文件:调用特定的API,如“获取下一个文件”或“列出所有文件”,获取ZIP文件内的所有条目。 3. 提取文件名:对于每一个文件条目,读取并保存其文件名。 4. 显示或处理文件名:将获取到的文件名显示在控制台...

Global site tag (gtag.js) - Google Analytics