gpt4 book ai didi

java - 如何解压缩具有子目录的 zip 存档?

转载 作者:搜寻专家 更新时间:2023-11-01 08:09:52 24 4
gpt4 key购买 nike

假设我有一个 zip 文件 MyZipFile.zip,其中包含 (1) 文件 MyFile.txt 和 (2) 文件夹 MyFolder其中包含一个文件 MyFileInMyFolder.txt,即如下内容:

MyZipFile.zip
   |-> MyFile.txt
   |-> MyFolder
          |-> MyFileInMyFolder.txt

我想解压缩这个 zip 存档。我能够在网上搜索到的最常见的代码示例使用 ZipInputStream 类,有点像粘贴在这个问题底部的代码。然而,使用上面的示例,问题在于它将创建 MyFolder 但不会解压缩 MyFolder 的内容。任何人都知道是否可以使用 ZipInputStream 或任何其他方式解压缩 zip 存档中文件夹的内容?

public static boolean unzip(File sourceZipFile, File targetFolder)
{
// pre-stuff

ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(sourceZipFile));
ZipEntry zipEntry = null;

while ((zipEntry = zipInputStream.getNextEntry()) != null)
{
File zipEntryFile = new File(targetFolder, zipEntry.getName());

if (zipEntry.isDirectory())
{
if (!zipEntryFile.exists() && !zipEntryFile.mkdirs())
return false;
}
else
{
FileOutputStream fileOutputStream = new FileOutputStream(zipEntryFile);

byte buffer[] = new byte[1024];
int count;

while ((count = zipInputStream.read(buffer, 0, buffer.length)) != -1)
fileOutputStream.write(buffer, 0, count);

fileOutputStream.flush();
fileOutputStream.close();
zipInputStream.closeEntry();
}
}

zipInputStream.close();

// post-stuff
}

最佳答案

试试这个:

ZipInputStream zis = null;
try {

zis = new ZipInputStream(new FileInputStream(zipFilePath));
ZipEntry entry;

while ((entry = zis.getNextEntry()) != null) {

// Create a file on HDD in the destinationPath directory
// destinationPath is a "root" folder, where you want to extract your ZIP file
File entryFile = new File(destinationPath, entry.getName());
if (entry.isDirectory()) {

if (entryFile.exists()) {
logger.log(Level.WARNING, "Directory {0} already exists!", entryFile);
} else {
entryFile.mkdirs();
}

} else {

// Make sure all folders exists (they should, but the safer, the better ;-))
if (entryFile.getParentFile() != null && !entryFile.getParentFile().exists()) {
entryFile.getParentFile().mkdirs();
}

// Create file on disk...
if (!entryFile.exists()) {
entryFile.createNewFile();
}

// and rewrite data from stream
OutputStream os = null;
try {
os = new FileOutputStream(entryFile);
IOUtils.copy(zis, os);
} finally {
IOUtils.closeQuietly(os);
}
}
}
} finally {
IOUtils.closeQuietly(zis);
}

请注意,它使用 Apache Commons IO处理流复制/关闭。

关于java - 如何解压缩具有子目录的 zip 存档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10849321/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com