称为 soap 网络服务,其中 returns 一个 zip 文件作为附件。如何在内存中解压?
called a soap web service which returns a zip file as an attachment. How to unzip it in memory?
我看过有关如何使用 Java 解压缩文件的帖子,其中 zip 文件位于磁盘上的某个位置。在我的情况下是不同的。
我有调用 soap 网络服务的代码。服务响应包括一个附件,它是一个 zip 文件。我已经能够得到附件。这是代码的一部分:
Iterator<?> i = soapResponse.getAttachments();
Object obj = null;
AttachmentPart att = (AttachmentPart) i.next();
所以,我将 zip 文件作为一种类型 "AttachmentPart" 但是我也可以这样做:
byte[] arr1 = att.getRawContentBytes();
这会给我包含 zip 文件的字节数组。
我也可以
Object obj = att.getContent()
因此,我可以在不同 formats/types 中获取 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 解压缩文件的帖子,其中 zip 文件位于磁盘上的某个位置。在我的情况下是不同的。
我有调用 soap 网络服务的代码。服务响应包括一个附件,它是一个 zip 文件。我已经能够得到附件。这是代码的一部分:
Iterator<?> i = soapResponse.getAttachments();
Object obj = null;
AttachmentPart att = (AttachmentPart) i.next();
所以,我将 zip 文件作为一种类型 "AttachmentPart" 但是我也可以这样做:
byte[] arr1 = att.getRawContentBytes();
这会给我包含 zip 文件的字节数组。
我也可以
Object obj = att.getContent()
因此,我可以在不同 formats/types 中获取 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);
}
}
}
}