我想在其中运行一些unix/shell
命令Java
并处理输出。我用过getRuntime.exec()
,但它没有为某些命令提供正确的输出,例如ls directory_path/*.tar.gz
. 对于该命令,我的程序没有给出任何输出,但给出了错误提示No such file or directory
。但是相同的命令在命令提示符下给出了正确的输出。
有没有其他方法可以在 Java 中执行包含通配符的命令?
我想在其中运行一些unix/shell
命令Java
并处理输出。我用过getRuntime.exec()
,但它没有为某些命令提供正确的输出,例如ls directory_path/*.tar.gz
. 对于该命令,我的程序没有给出任何输出,但给出了错误提示No such file or directory
。但是相同的命令在命令提示符下给出了正确的输出。
有没有其他方法可以在 Java 中执行包含通配符的命令?
有没有其他方法可以在 Java 中执行包含通配符的命令?
就在这里。
您的代码中存在三个潜在问题:
假设您想查看外部命令的输出,您需要处理它产生的输出,并自己打印。
按照我在此处提供的示例进行操作:
如果您天真地经历,外壳扩展*
不起作用Runtime.exec
。您必须/bin/bash
明确地经历。
如果您尝试列出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();
那是因为您指定了目录的相对路径,并且您的应用程序正在工作目录中运行。您指定的路径是相对于该工作目录的。
要找出绝对路径是什么,您可以查看工作目录。
System.out.println("Working directory: " + System.getProperty("user.dir"));
“ls directory_path/*.tar.gz”相对于当前目录起作用。