我想以递归方式读取zip文件,然后在单独的文件夹中提取所有文件。
例如,如果some.zip
文件包含以下内容:
file5.txt
somefolder
file.txt
file4.txt
inside.zip
file2.txt
file3.txt
我想要的只是所有文件,包括zip文件中的zip文件中的所有文件(上例中的inside.zip
)。
somefolder
的最终结果将是所有文件(我不关心文件夹结构):
file5.txt
file.txt
file4.txt
file2.txt
file3.txt
我尝试了什么:
我有下面的代码,但它维护文件夹结构,并且不会在zip文件中打开zip文件:
import java.util.zip.*
def extractZip (String zipFile) {
def zipIn = new File(zipFile)
def zip = new ZipFile(zipIn)
zip.entries().findAll { !it.directory }.each { e ->
(e.name as File).with{ f ->
f.parentFile?.mkdirs()
f.withOutputStream { w ->
w << zip.getInputStream(e)
}
}
}
}
答案 0 :(得分:1)
如果文件是zip文件,则获取其输入的inputStream。创建一个新的ZipInputStream。提取流。
public void extract(ZipInputStream zipFile, File outputDir) throws IOException
{
ZipEntry entry;
while ( ( entry = zipFile.getNextEntry()) != null)
{
if (entry.isDirectory())
continue;
if (entry.getName().endsWith(".zip"))
{
extract(new ZipInputStream(zipFile), outputDir);
}
else
{
extractToDir(zipFile, new File (outputDir, entry.getName()));
}
}
}
private void extractToDir(ZipInputStream zipFile, File outFile) throws FileNotFoundException
{
ByteStreams.copy(zipFile, new FileOutputStream(outFile));
}
public static void main(String... args)
{
extract(new ZipInputStream(new FileInputStream(zipFileName)), new File("outputPath"));
}