Я пытаюсь распаковать банку в определенное место. Он отлично работает для большинства моих библиотек, но для 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
Метод "Извлечь банку: ..." вызывается до вызова метода извлечения, не беспокойтесь об этом. Моя главная идея - игнорировать MANIFEST.MF (см. Комментарий после предложения if), если я не могу найти какое-либо решение, но мне не нравится это решение, потому что я не знаю, нужно ли оно мне позже, и мне просто любопытно, почему это случается ... Я подумал, что я должен спросить некоторых с большим опытом;) Есть мысли?