2

我想在其中运行一些unix/shell命令Java并处理输出。我用过getRuntime.exec(),但它没有为某些命令提供正确的输出,例如ls directory_path/*.tar.gz. 对于该命令,我的程序没有给出任何输出,但给出了错误提示No such file or directory。但是相同的命令在命令提示符下给出了正确的输出。

有没有其他方法可以在 Java 中执行包含通配符的命令?

4

3 回答 3

5

有没有其他方法可以在 Java 中执行包含通配符的命令?

就在这里。

您的代码中存在三个潜在问题:

  1. 假设您想查看外部命令的输出,您需要处理它产生的输出,并自己打印。

    按照我在此处提供的示例进行操作:

  2. 如果您天真地经历,外壳扩展*不起作用Runtime.exec。您必须/bin/bash明确地经历。

  3. 如果您尝试列出directory_path/*.tar.gz您应该知道的内容(如果您不是以 a 开头/directory_path将相对于当前工作目录进行解析。首先尝试给出绝对路径以确保它工作,然后尝试找出它为什么找不到相对路径。

这是一个应该有效的完整示例:

Process proc = new ProcessBuilder("/bin/bash", "-c",
                                  "ls /.../directory_path/*.tar.gz").start();

Reader reader = new InputStreamReader(proc.getInputStream());
int ch;
while ((ch = reader.read()) != -1)
    System.out.print((char) ch);
reader.close();
于 2012-08-03T06:22:29.427 回答
0

那是因为您指定了目录的相对路径,并且您的应用程序正在工作目录中运行。您指定的路径是相对于该工作目录的。

要找出绝对路径是什么,您可以查看工作目录。

System.out.println("Working directory: " + System.getProperty("user.dir"));
于 2012-08-03T06:15:08.680 回答
0

“ls directory_path/*.tar.gz”相对于当前目录起作用。

于 2012-08-03T06:15:21.270 回答