gpt4 book ai didi

java - 使用 Java 打开位于另一个存档文件中的存档文件

转载 作者:行者123 更新时间:2023-12-02 10:03:23 25 4
gpt4 key购买 nike

我有一个名为“file.ear”的文件。该文件包含多个文件,其中包括一个名为“file.war”的“war”文件(也是一个存档)。我打算打开“file.war”中的文本文件。此时此刻,我的问题是从这个“file.war”创建 ZipFile 对象的最佳方法是什么

我从“file.ear”创建了一个 ZipFile 对象并迭代了条目。当条目为“file.war”时,我尝试创建另一个 ZipFile

ZipFile earFile = new ZipFile("file.ear");
Enumeration(? extends ZipEntry) earEntries = earFile.entries();

while (earEntries.hasMoreElements()) {
ZipEntry earEntry = earEntries.nextElement();
if (earEntry.toString().equals("file.war")) {
// in this line I want to get a ZipFile from the file "file.war"
ZipFile warFile = new ZipFile(earEntry.toString());
}
}

我希望从“file.war”获取 ZipFile 实例,并且标记的行会抛出 FileNotFoundException。

最佳答案

ZipFile 仅适用于...文件。 ZipEntry 仅位于内存中,而不位于硬盘上。

您最好使用ZipInputStream:

  1. FileInputStream 包装到 ZipInputStream
  2. 您可以保留 .war 条目的 InputStream
  3. 将 .war 依次包装到 InputStreamZipInputStream
  4. 您可以保留文本文件条目,读取其InputStream
  5. 对文本 InputStream 执行任何您想要的操作!
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class Snippet {

public static void main(String[] args) throws IOException {

InputStream w = getInputStreamForEntry(new FileInputStream("file.ear"), "file.war");
InputStream t = getInputStreamForEntry(w, "prova.txt");

try (Scanner s = new Scanner(t);) {
s.useDelimiter("\\Z+");
if (s.hasNext()) {
System.out.println(s.next());
}
}

}

protected static InputStream getInputStreamForEntry(InputStream in, String entry)
throws FileNotFoundException, IOException {
ZipInputStream zis = new ZipInputStream(in);

ZipEntry zipEntry = zis.getNextEntry();

while (zipEntry != null) {
if (zipEntry.toString().equals(entry)) {
// in this line I want to get a ZipFile from the file "file.war"
return zis;
}
zipEntry = zis.getNextEntry();
}
throw new IllegalStateException("No entry '" + entry + "' found in zip");
}

}

呵呵!

关于java - 使用 Java 打开位于另一个存档文件中的存档文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55471141/

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