Я пытаюсь распаковать все файлы jar и файлы jar, вложенные в файл jar.
Например, скажем, есть Test.jar, а внутри Test.jar есть Test1.jar ,,
Я попытался сделать временный каталог и разархивировать его, когда это был jar-файл, рекурсивный вызов.
Здесь ниже мой код и журнал, который я получил. Я понятия не имею об этом.
Я почти уверен, что вход был каталогом. Я понятия не имею, как решить эту ошибку. Кроме того, я почти уверен, что ошибка здесь (Collection<File> files = FileUtils.listFiles(root, null, recursive);
)
Curr directory:/Users/younghoonkwon/jar-analyzer
unzipping directory/Users/younghoonkwon/jar-analyzer/test1.jar@
Curr directory:/Users/younghoonkwon/jar-analyzer/test1.jar@
java.lang.IllegalArgumentException: Parameter 'directory' is not a directory
at org.apache.commons.io.FileUtils.validateListFilesParameters(FileUtils.java:545)
at org.apache.commons.io.FileUtils.listFiles(FileUtils.java:521)
at org.apache.commons.io.FileUtils.listFiles(FileUtils.java:691)
at org.vulnerability.checker.JarParser.unzipJars(JarParser.java:31)
at org.vulnerability.checker.JarParser.unzipJars(JarParser.java:38)
at org.vulnerability.checker.VulnerabilityChecker.main(VulnerabilityChecker.java:26)
[/Users/younghoonkwon/jar-analyzer/test1.jar]
Мой код:
public void unzipJars(String toFind, String currDirectory) {
File root = new File(currDirectory);
try {
boolean recursive = true;
System.out.println("Curr directory:"+root);
Collection<File> files = FileUtils.listFiles(root, null, recursive);
for (Iterator<File> iterator = files.iterator(); iterator.hasNext();) {
File file = (File) iterator.next();
if (file.getName().endsWith(toFind)) {
if(toFind.endsWith("jar")) {
unzip(file.getAbsolutePath() + "@",file.getAbsolutePath());
System.out.println("unzipping directory"+ file.getAbsolutePath()+"@");
unzipJars("jar", file.getAbsolutePath()+"@");
this.jarList.add(file.getAbsolutePath());
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
static void unzip(String destDirPath, String zipFilePath) throws IOException {
Runtime.getRuntime().exec("unzip "+ zipFilePath + " -d" + destDirPath);
}