gpt4 book ai didi

java - 在Unix中使用Java Runtime类查找Jar文件中的类

转载 作者:行者123 更新时间:2023-12-02 05:42:11 25 4
gpt4 key购买 nike

我正在使用 Java 运行时类编写一个程序来检查 jar 文件列表中的类文件。这是我的程序:

import java.io.*;

public class JavaRunCommand {

public static void main(String args[]) {

String s = null;

try {

Process p = Runtime.getRuntime().exec("find /home/user/lib/ -name \"*.jar\" | xargs grep MyClass.class");

BufferedReader stdInput = new BufferedReader(new
InputStreamReader(p.getInputStream()));

BufferedReader stdError = new BufferedReader(new
InputStreamReader(p.getErrorStream()));

// read the output from the command
System.out.println("Here is the standard output of the command:\n");
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
}

// read any errors from the attempted command
System.out.println("Here is the standard error of the command (if any):\n");
while ((s = stdError.readLine()) != null) {
System.out.println(s);
}

System.exit(0);
}
catch (IOException e) {
System.out.println("exception..");
e.printStackTrace();
System.exit(-1);
}
}
}

当我运行该程序时,我收到错误消息:

Here is the standard output of the command:

Here is the standard error of the command (if any):

**find: paths must precede expression: |
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]**

如果我直接运行命令 find/home/user/lib/-name\"*.jar\"| 请帮助我在这段代码中缺少什么。 xargs grep MyClass.class"); 在我的 unix 命令行上,那么它工作正常。

此外,如果我用下面的行替换表达式,那么我的 Java 代码就可以正常工作。

Process p1 = Runtime.getRuntime().exec(new String[] { "/bin/sh", "-c", "cd /home/user/lib/ && find . -name \"*.jar\" | xargs grep MyClass.class" });

最佳答案

Process p = Runtime.getRuntime().exec("find /home/user/lib/ -name \"*.jar");

将其更改为

Process p = Runtime.getRuntime().exec("sh -c find /home/user/lib/ -name \"*.jar");

以便 shell 介入并扩展通配符。

但您实际上并不需要在这里运行 find,您可以通过递归调用 Files.listFiles() 自行完成。

我也有兴趣看看你接下来要做什么。我会通过定义一个使用该 JAR 列表初始化的 URLClassLoader 来完成此操作,然后使用它来尝试加载该类,而不是自己解压所有 JAR。

关于java - 在Unix中使用Java Runtime类查找Jar文件中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24422984/

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