我尝试将罐子解压缩到特定位置。它可以很好地用于我的大多数库,但是对于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子句后的评论),但我不喜欢该解决方案,因为我不知道以后是否需要它,我很好奇为什么发生这种情况...我想我应该问更多的经验;)有什么想法吗?