我想在Java
中运行一些unix/shell
命令并处理输出。我使用了getRuntime.exec()
,但它没有给出像ls directory_path/*.tar.gz
这样的命令的正确输出。对于那个命令我的程序没有给出任何输出,但它给出了错误,说No such file or directory
。但是相同的命令在命令提示符下提供正确的输出。如何使用Java通配符运行unix/shell命令?
是否有任何其他方式来执行在Java中包含通配符的命令?
我想在Java
中运行一些unix/shell
命令并处理输出。我使用了getRuntime.exec()
,但它没有给出像ls directory_path/*.tar.gz
这样的命令的正确输出。对于那个命令我的程序没有给出任何输出,但它给出了错误,说No such file or directory
。但是相同的命令在命令提示符下提供正确的输出。如何使用Java通配符运行unix/shell命令?
是否有任何其他方式来执行在Java中包含通配符的命令?
是否有任何其他方式来执行命令,其中包括Java通配符?
是的。
你在你的代码的三个潜在的问题:
假设你想看到你需要把它产生的输出护理外部命令的输出,并且自己打印出来。
按照我在这里提供的示例:
如果你天真地经历Runtime.exec
。你要的*
shell扩展不工作明确地通过/bin/bash
。
如果您尝试列出的directory_path/*.tar.gz
的内容,你应该知道,(如果你不开始与/
)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”相对于CURRENT目录有效。
no here directory_path =/actual/DEPOT – akhila 2012-08-03 06:18:37
仔细检查你的路径,也是当前目录,你都在。 '没有这样的文件或目录'意味着它正在正确执行命令,但该路径不是你认为它是什么的。 – 2012-08-03 06:25:05
你只是想列出文件?你可以用java代码来做到这一点,而不是运行依赖于系统的“本地”工具。 – hennr 2012-08-03 07:13:54