java zipfile 文件夹_如何在Java中使用ZipFile类递归打开所有文件,包括文件夹下的文件...

此篇博客介绍如何使用Java的ZipFile API在内存中处理zip文件,特别关注如何遍历包括子文件夹中的Excel文件,并提供了一个处理zip文件中Excel文件的改进方法。作者分享了他们在代码中的关键部分和可能遇到的问题解决方案。
摘要由CSDN通过智能技术生成

我正在Java中创建一个方法来打开zip文件并动态处理zip文件中的Excel文件.我在Java中使用API​​ ZipFile,并希望在内存中处理zip文件而不将其解压缩到文件系统.

到目前为止,我能够遍历zip文件,但是在列出zip文件中目录下的文件时遇到了问题. Excel文件可以位于zip文件的文件夹中.

下面是我当前的代码,在我遇到问题的部分有评论.

任何帮助是极大的赞赏 :)

public static void main(String[] args) {

try {

ZipFile zip = new ZipFile(new File("C:\\sample.zip"));

for (Enumeration e = zip.entries(); e.hasMoreElements(); ) {

ZipEntry entry = (ZipEntry) e.nextElement();

String currentEntry = entry.getName();

if (entry.isDirectory()) {

/*I do not know how to get the files underneath the directory

so that I can process them */

InputStream is = zip.getInputStream(entry);

} else {

InputStream is = zip.getInputStream(entry);

}

}

} catch (ZipException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

解决方法:

public static void unzip(final ZipFile zipfile, final File directory)

throws IOException {

final Enumeration extends ZipEntry> entries = zipfile.entries();

while (entries.hasMoreElements()) {

final ZipEntry entry = entries.nextElement();

final File file = file(directory, entry);

if (entry.isDirectory()) {

continue;

}

final InputStream input = zipfile.getInputStream(entry);

try {

// copy bytes from input to file

} finally {

input.close();

}

}

}

protected static File file(final File root, final ZipEntry entry)

throws IOException {

final File file = new File(root, entry.getName());

File parent = file;

if (!entry.isDirectory()) {

final String name = entry.getName();

final int index = name.lastIndexOf('/');

if (index != -1) {

parent = new File(root, name.substring(0, index));

}

}

if (parent != null && !parent.isDirectory() && !parent.mkdirs()) {

throw new IOException(

"failed to create a directory: " + parent.getPath());

}

return file;

}

标签:java,zipfile,extract

来源: https://codeday.me/bug/20190831/1776498.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值