如何在Java中为exec方法指定arguement文件夹?

时间:2016-03-10 09:17:51

标签: java unix

所以我有这个简单的代码:

Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("ls");

工作正常。 (pr输入流将给我文件名..)

但是我想做这样的工作:

Process pr = rt.exec("~/ls");

我想获取当前登录用户的Home文件夹目录中的文件名。

我得到的是:

Exception in thread "main" java.io.IOException: Cannot run program "~/ls": error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1047)

2 个答案:

答案 0 :(得分:4)

~是由shell处理的扩展,Java不知道它。

要获取主目录,请使用java.home属性(使用System.getProperty

注意,如果您想在特定的工作目录中运行程序,请使用ProcessBuilder并调用directory方法。

答案 1 :(得分:2)

当你运行一个程序时,它与运行shell来解析你的命令行是不同的,除非你实际调用shell

exec("/bin/sh", "-c", "ls ~");

exec("ls", System.getProperty("user.home"));

注意:在开始时指定目录时,您希望在该目录中运行该命令,而不是将该目录作为参数传递给命令。

e.g。

/bin/ls

表示运行ls目录中的/bin(没有参数)

ls /bin

表示将/bin传递给命令ls