所以我有这个简单的代码:
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)
答案 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