如何读取没有清单的war / jar文件

时间:2011-05-10 11:51:36

标签: java jar manifest war

我有一个war文件,其中不包含清单,甚至不包含META-INF文件夹。现在我的问题是我写了一个代码,它与包含清单的普通war文件一起工作正常。现在我需要阅读一个不包含清单的war文件。

当我检查时

while ((ze = zis.getNextEntry()) != null)

刚刚跳过此条件。是否有任何API将其视为普通的zip文件,或者是否有任何解决方法。

我尝试使用JarEntry以及ZipEntry。这是一个应该解释的小片段。

try {
            FileInputStream fis = new FileInputStream(applicationPack);
            ZipArchiveInputStream zis = new ZipArchiveInputStream(fis);
            ArchiveEntry ze = null;
            File applicationPackConfiguration;           
            while ((ze = zis.getNextEntry()) != null) {
            // do someting
}

可以做些什么?

2 个答案:

答案 0 :(得分:3)

您只需使用ZipFile类列出内容:

try {
  // Open the ZIP file
  ZipFile zf = new ZipFile("filename.zip");

  // Enumerate each entry
  for (Enumeration entries = zf.entries(); entries.hasMoreElements();) {
    // Get the entry name
    String zipEntryName = ((ZipEntry)entries.nextElement()).getName();
  }
} catch (IOException e) {
}

取自here的示例。 retrieving the file from zip的另一个例子。

<强>更新

上面的代码确实存在只包含目录作为顶级元素的zip文件的问题。

此代码有效(已测试):

    try {
        // Open the ZIP file
        FileInputStream fis = new FileInputStream(new File("/your.war"));
        ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));

        ZipEntry entry = null;

        while ((entry = zis.getNextEntry()) != null)
            // Get the entry name
            System.out.println(entry.getName());
    } catch (IOException e) {
    }

答案 1 :(得分:0)

您可以使用java.util.zip包中的类。只需使用ZipEntry将ZipArchiveInputStream替换为ZipInputStream和ArchiveEntry:

FileInputStream fis = new FileInputStream(new File("/path/to/your.war"));
ZipInputStream zis = new ZipInputStream(fis);
ZipEntry ze = null;
while ((ze = zis.getNextEntry()) != null) {
   System.out.println(ze.getName());
}