提取jar Manifest.mf是目录错误

时间:2019-01-19 13:47:18

标签: java manifest unzip

我尝试将罐子解压缩到特定位置。它可以很好地用于我的大多数库,但是对于2,我得到一个错误,即MANIFEST.MF是目录。

我的代码:

public static void extract(File jar, String destination) throws IOException {

        //Creates the Folder for Extracting
        File outputFolder = new File(destination + File.separator + jar.getName());
        if (!outputFolder.exists()) {
            outputFolder.mkdir();
        }

        // Extract the Jar
        ZipInputStream zis = new ZipInputStream(new FileInputStream(jar));
        ZipEntry ze = zis.getNextEntry();

        while (ze != null) {
            String filePath = outputFolder + File.separator + ze.getName();
            if (!ze.isDirectory()) {
                //&& !ze.getName().contains("MANIFEST.MF")
                // If the entry is a file, extract it, otherwise ...
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
                byte[] bytesIn = new byte[BUFFER_SIZE];
                int read = 0;
                while ((read = zis.read(bytesIn)) != -1) {
                    bos.write(bytesIn, 0, read);
                }
                bos.close();
            } else {
                // ... create a directory
                File dir = new File(filePath);
                dir.mkdir();
            }
            // close entry and move on to the next one
            zis.closeEntry();
            ze = zis.getNextEntry();
        }
        zis.close();
    }

我的控制台输出:

Extract Jar: jackson-databind-2.9.1.jar
Extract Jar: guava-23.0.jar
Extract Jar: mockito-core-2.10.0.jar
Extract Jar: mockito-all-1.10.19.jar
Extract Jar: clojure-1.8.0.jar
Extract Jar: slf4j-log4j12-1.7.25.jar
Extract Jar: scala-library-2.13.0-M2.jar
java.io.FileNotFoundException: /home/tim/.m2/VulnerabilityChecker/TempFiles/scala-library-2.13.0-M2.jar/META-INF/MANIFEST.MF (Ist ein Verzeichnis)
Extract Jar: log4j-1.2.17.jar
    at java.base/java.io.FileOutputStream.open0(Native Method)
    at java.base/java.io.FileOutputStream.open(FileOutputStream.java:276)
    at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:220)
    at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:109)
    at HelperClasses.JarExtractor.extract(JarExtractor.java:94)
    at libraryChecker.jarUtility.JarFinder.getSearchedJarFromList(JarFinder.java:46)
    at libraryChecker.jarUtility.JarCrawler.searchForFittingJarFile(JarCrawler.java:18)
    at schwachstellenkorrektursuche.LibraryChecker.start(LibraryChecker.java:86)
    at schwachstellenkorrektursuche.Main.main(Main.java:9)
Extract Jar: javax.servlet-api-4.0.0.jar
Extract Jar: commons-lang-2.6.jar
Extract Jar: tools.nrepl-0.2.13.jar
Extract Jar: clojure-complete-0.2.4.jar
java.io.FileNotFoundException: /home/tim/.m2/VulnerabilityChecker/TempFiles/clojure-complete-0.2.4.jar/META-INF/MANIFEST.MF (Ist ein Verzeichnis)
    at java.base/java.io.FileOutputStream.open0(Native Method)
    at java.base/java.io.FileOutputStream.open(FileOutputStream.java:276)
    at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:220)
    at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:109)
    at HelperClasses.JarExtractor.extract(JarExtractor.java:94)
    at libraryChecker.jarUtility.JarFinder.getSearchedJarFromList(JarFinder.java:46)
    at libraryChecker.jarUtility.JarCrawler.searchForFittingJarFile(JarCrawler.java:18)
    at schwachstellenkorrektursuche.LibraryChecker.start(LibraryChecker.java:86)
    at schwachstellenkorrektursuche.Main.main(Main.java:9)
Extract Jar: commons-lang3-3.6.jar
Extract Jar: maven-core-2.2.1.jar
Extract Jar: logback-classic-1.2.3.jar
Extract Jar: junit-4.12.jar
Extract Jar: slf4j-api-1.7.25.jar
Extract Jar: httpclient-4.5.3.jar
Extract Jar: maven-core-2.2.1-sources.jar
Extract Jar: commons-io-2.5.jar
Extract Jar: servlet-api-2.5.jar
Extract Jar: commons-logging-1.2.jar

“ Extract Jar:...” get在调用extract方法之前被调用,不必担心。我的主要想法是,如果我找不到任何解决方案,请忽略MANIFEST.MF(请参阅if子句后的评论),但我不喜欢该解决方案,因为我不知道以后是否需要它,我很好奇为什么发生这种情况...我想我应该问更多的经验;)有什么想法吗?

0 个答案:

没有答案