在Java

时间:2015-06-10 10:57:59

标签: java jar zip unzip

我想提取一个包含jar文件的zip文件。此文件具有复杂的文件夹结构,并且在其中一个文件夹中有一个jar文件。当我尝试使用以下代码来提取jar文件时,程序在读取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文件,请告诉我。

1 个答案:

答案 0 :(得分:0)

这是否符合您的需求?

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);
            }
        }
    }
}