在 Java 中提取包含 jar 文件的 zip 文件

Extracting a zip file containing a jar file in Java

我想提取一个包含 jar 文件的 zip 文件。该文件具有复杂的文件夹结构,其中一个文件夹中有一个 jar 文件。当我尝试使用以下代码提取 jar 文件时,程序在读取 jar 文件时进入无限循环并且永远不会恢复。它继续写入 jar 的内容,直到我们达到光盘的限制 space,即使 jar 只有几 Mbs。

请在下面找到代码片段

`

    // using a ZipInputStream to get the zipIn by passing the zipFile as FileInputStream    
    ZipEntry entry = zipIn.getNextEntry();
    String fileName= entry.getName()
    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(fileName));
    byte[] bytesIn = new byte[(int)bufferSize];
    while (zipIn.read(bytesIn) > 0) // This is the part where the loop does not end
    {
        bos.write(bytesIn);
    }
    ..
    // flushing an closing the bos

请告诉我是否有任何方法可以避免这种情况并将 jar 文件导出到所需位置。

这符合您的需求吗?

public static void main(String[] args) {
    try {
        copyJarFromZip("G:\Dateien\Desktop\Desktop.zip",
                       "G:\Dateien\Desktop\someJar.jar");
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

public static void copyJarFromZip(final String zipPath, final String targetPath) throws IOException {
    try (ZipFile zipFile = new ZipFile(zipPath)) {
        for (final Enumeration<? extends ZipEntry> e = zipFile.entries(); e.hasMoreElements();) {
            ZipEntry zipEntry = e.nextElement();
            if (zipEntry.getName().endsWith(".jar")) {
                Files.copy(zipFile.getInputStream(zipEntry), Paths.get(targetPath),
                           StandardCopyOption.REPLACE_EXISTING);
            }
        }
    }
}