Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何访问ZipEntry中文件夹中的文件_Java_Io_Zipfile - Fatal编程技术网

Java 如何访问ZipEntry中文件夹中的文件

Java 如何访问ZipEntry中文件夹中的文件,java,io,zipfile,Java,Io,Zipfile,对不起,标题很混乱。基本上我有一个ZipFile,里面有一堆.txt文件,但也有一个文件夹。下面显示的代码是在zip条目中查找该文件夹。这部分我做得很好。问题是,一旦我找到文件夹,它就是一个ZipEntry。它没有任何有用的方法来获取文件夹中的条目。我正在查找的文件夹中有更多我想要处理的.txt文件(这是主要目标) zipFile=新的zipFile(zipName); 枚举ZipEntry有一个方法isDirectory() 如果这是目录项,则返回true。一个目录条目是 定义为名称以“/”结

对不起,标题很混乱。基本上我有一个ZipFile,里面有一堆.txt文件,但也有一个文件夹。下面显示的代码是在zip条目中查找该文件夹。这部分我做得很好。问题是,一旦我找到文件夹,它就是一个ZipEntry。它没有任何有用的方法来获取文件夹中的条目。我正在查找的文件夹中有更多我想要处理的.txt文件(这是主要目标)

zipFile=新的zipFile(zipName);

枚举
ZipEntry
有一个方法
isDirectory()

如果这是目录项,则返回true。一个目录条目是 定义为名称以“/”结尾的名称

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

假设
folderName
的值为
“/zip/myzip/directory”
,则该目录中的文件的名称为
“/zip/myzip/directory/myfile.txt”
。您可以使用JavaNIO
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/

像那样的东西可能会对你有帮助

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();
     //.....
    }
}
final ZipFile zf=新ZipFile(文件名);

对于(final Enumeration实际上有一种更简单的方法。如果您知道当前条目是一个目录,那么在使用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(); 
}
这将遍历所有文件(按照它们列出的顺序),而无需显式检查它们是否为目录,因为您对它们没有做任何不同的操作

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