gpt4 book ai didi

java - 解压嵌套的 jar 文件 java

转载 作者:太空宇宙 更新时间:2023-11-04 10:21:15 25 4
gpt4 key购买 nike

我正在尝试解压缩所有 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);
}

最佳答案

这个算法对我来说似乎没问题。该错误似乎是由于解压缩的文件不是目录(而是文件)或不存在而引起的。如果由于输出文件已存在而解压 .jar 失败,您的 unzip() 方法不会引发任何异常。

您是否之前运行过可能导致 .jar 或目录包含不需要的同名输出文件的代码?

在调用 FileUtils.listFiles() 之前,通过 File.isDirectory() 检查根 File 对象是否实际上是一个目录并且存在(或者它是否是一个文件而不是一个目录)或File.isFile() .

关于java - 解压嵌套的 jar 文件 java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51147110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com