gpt4 book ai didi

java - 称为soap web 服务,它返回一个zip 文件作为附件。如何解压到内存中?

转载 作者:行者123 更新时间:2023-12-02 01:25:53 28 4
gpt4 key购买 nike

我看过有关如何使用 Java 解压缩文件的帖子,其中 zip 文件位于磁盘上的某个位置。就我而言,情况有所不同。

我有调用肥皂网络服务的代码。服务响应包括一个 zip 文件附件。我已经能够获取附件了。这是部分代码:

 Iterator<?> i = soapResponse.getAttachments();
Object obj = null;
AttachmentPart att = (AttachmentPart) i.next();

所以,我将 zip 文件作为“AttachmentPart”类型,但我也可以这样做:

byte[] arr1 = att.getRawContentBytes();

这将为我提供包含 zip 文件的字节数组。

我也可以

Object obj = att.getContent()

因此,我可以获得不同格式/类型的 zip 文件。 zip 文件包含两个 .csv 文件,我必须对这些文件执行不同的操作。为了让我的问题更简单,我现在要做的就是获取两个 .csv 文件并将其内容打印到控制台。

我想在内存中做所有的事情。我不想将 zip 文件的内容放在磁盘上。

如何解压附件并打印内容?

最佳答案

如果您从 AttachmentPart 对象中获取 att.getRawContent(),则可以将其传递给内置的 ZipInputStream 以读取zip 文件的内容。然后,您可以将从 ZipInputStream 读取的字节直接写入 System.out 以在控制台上查看内容。

下面是一个示例,它应该读取 zip 内容,然后将条目名称和条目内容写入标准输出,假设您将包含 zip 文件的 AttachmentPart 传递给它。它还会过滤掉任何目录条目,以便它们不会被打印。

public static void printAttachmentPartZip(AttachmentPart att) throws IOException, SOAPException {
try (ZipInputStream zis = new ZipInputStream(att.getRawContent())) {
byte[] buffer = new byte[1024];
for (ZipEntry zipEntry = zis.getNextEntry(); zipEntry != null; zipEntry = zis.getNextEntry()) {
if (zipEntry.isDirectory()) {
continue;
}
System.out.println(zipEntry.getName());
for (int len = zis.read(buffer); len > 0; len = zis.read(buffer)) {
System.out.write(buffer, 0, len);
}
}
}
}

关于java - 称为soap web 服务,它返回一个zip 文件作为附件。如何解压到内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56943187/

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