2012-08-03 109 views
2

我想在Java中运行一些unix/shell命令并处理输出。我使用了getRuntime.exec(),但它没有给出像ls directory_path/*.tar.gz这样的命令的正确输出。对于那个命令我的程序没有给出任何输出,但它给出了错误,说No such file or directory。但是相同的命令在命令提示符下提供正确的输出。如何使用Java通配符运行unix/shell命令?

是否有任何其他方式来执行在Java中包含通配符的命令?

+0

仔细检查你的路径,也是当前目录,你都在。 '没有这样的文件或目录'意味着它正在正确执行命令,但该路径不是你认为它是什么的。 – 2012-08-03 06:25:05

+0

你只是想列出文件?你可以用java代码来做到这一点,而不是运行依赖于系统的“本地”工具。 – hennr 2012-08-03 07:13:54

回答

4

是否有任何其他方式来执行命令,其中包括Java通配符?

是的。

你在你的代码的三个潜在的问题:

  1. 假设你想看到你需要把它产生的输出护理外部命令的输出,并且自己打印出来。

    按照我在这里提供的示例:

  2. 如果你天真地经历Runtime.exec。你要的* shell扩展不工作明确地通过/bin/bash

  3. 如果您尝试列出的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(); 
+0

感谢您通过此获得正确的输出。那么它是否也适用于其他命令? – akhila 2012-08-03 06:57:33

+0

是的,它适用于各种命令。 (但是除非你真的需要支持通配符,否则不要通过'/ bin/bash')。确保你注册了所有有用的答案,并且[接受答案](http://meta.stackexchange.com/questions/5234/how-do-accepting-an-answer-work)如果它解决了你的问题。 – aioobe 2012-08-03 07:02:33

+0

好的谢谢。如何接受答案? – akhila 2012-08-03 07:08:27

0

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

要了解绝对路径,可以查看工作目录。

System.out.println("Working directory: " + System.getProperty("user.dir")); 
+0

no here directory_path =/actual /仅限DEPOT。 – akhila 2012-08-03 06:17:56

+0

您应该知道,这意味着假设您位于基于Unix的操作系统上,那么您的硬盘根目录中有一个名为“actual”的文件夹。 – 2012-08-03 06:19:14

+0

是的。那只是已有的路径。相同的命令在命令提示符下工作。 – akhila 2012-08-03 06:22:35

0

“ls directory_path/* .tar.gz”相对于CURRENT目录有效。

+0

no here directory_path =/actual/DEPOT – akhila 2012-08-03 06:18:37