如何访问ZipEntry内部文件夹内的文件

时间:2013-08-16 18:43:40

标签: java io zipfile

很抱歉这个令人困惑的标题。基本上我有一个ZipFile,其中有一堆.txt文件,但也有一个文件夹。我在下面显示的代码是在zip条目中找到该文件夹​​。我做完这一部分就好了。问题是,一旦我找到该文件夹​​,它就是一个ZipEntry。没有任何有用的方法来获取该文件夹中的条目。我找到的文件夹中有更多我想要处理的.txt文件(这是主要目标)。

zipFile = new ZipFile(zipName);
Enumeration<? extends ZipEntry> entries = zipFile.entries();
while(entries.hasMoreElements()){
    ZipEntry current = entries.nextElement();
    if(current.getName().equals(folderName)) {
         assertTrue(current.isDirectory());
        //Here is where I want to get the files in the folder 
    }
}

3 个答案:

答案 0 :(得分:4)

ZipEntry有一个方法isDirectory()

  

如果这是目录条目,则返回true。目录条目是   定义为名称以'/'。

结尾的名字

您要做的是迭代所有条目(正如您所做的那样)并获取目录内的InputStream,即。具有相对于目录的路径。

folderName的值为"/zip/myzip/directory",然后该目录中的文件名为"/zip/myzip/directory/myfile.txt"。您可以使用Java NIO Path api来帮助您

Path directory = Paths.get("/zip/myzip/directory"); // you get this directory path from the ZipEntry
Path file = Paths.get(current.getName());
if (file.startsWith(directory)) {
   // do your thing
}

您可以将InputStream视为

zipFile.getInputStream(current);

注意 Zip文件中的路径将相对于Zip位置的根目录。如果拉链是

C:/Users/You/Desktop/myzip.zip

直接在zip中的文件夹,显示类似

的路径
directory/

答案 1 :(得分:-3)

这样的事可能对你有帮助

final ZipFile zf = new ZipFile(filename);
for (final Enumeration<? extends ZipEntry> e = zf.entries(); e.hasMoreElements();) {
final ZipEntry ze = e.nextElement();
if (!ze.isDirectory()) {
     final String name = ze.getName();
     //.....
    }
}

享受它; - )

答案 2 :(得分:-3)

实际上有一种更简单的方法可以做到这一点。如果您知道当前条目是目录,那么在使用ZipInputStream时,下一个元素将自动成为该目录中的任何内容。例如,假设您的目录结构是:

Dir1/A.txt Dir1/B.txt Dir2/C.txt D.txt

然后访问上述所有三个,你只需要这样做:

ZipInputStream Zis = new ZipInputStream(in);
ZipEntry entry = Zis.getNextEntry();
while (entry != null) {
    if(!entry.isDirectory)
       //do something with entry  
    //else continue  
    entry = Zis.getNextEntry(); 
}

这将遍历所有文件(按照它们列出的顺序),而不必显式检查它们是否是目录,因为您没有对它们做任何不同的事情。