Runtime.getRuntime()。exec(“ls~”)不列出主目录的内容

时间:2016-12-18 05:31:09

标签: java process runtime.exec

这是一台Linux机器,以下代码不会产生任何输出,我很好奇为什么。 附: - 我没有读过需要转义的波浪号,但无论如何都用反斜杠转义了波浪号,而javac指出了语法错误。

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;

class Run {
    public static void main(String args[]) throws IOException {
        Process p = Runtime.getRuntime().exec("ls ~");
        BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line;

        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
    }
}

2 个答案:

答案 0 :(得分:1)

那是因为ls '~'被shell替换为主目录的路径。你没有使用shell。相反,它就像你运行ls: cannot access '~': No such file or directory ,它给出了错误:

p.getInputStream()

事实上,当您将p.getErrorStream()更改为ls: cannot access '~': No such file or directory 时,您可以看到这种情况发生,这会使您的程序输出:

defmodule MyApp.Constants do
  defmacro const_a do
    quote do: "A"
  end
end

答案 1 :(得分:1)

你需要通过shell插入~来获取主文件夹,而不是从系统属性中读取user.home,如

Process p = Runtime.getRuntime().exec("ls " + System.getProperty("user.home"));

你也可以使用ProcessBuilder之类的

ProcessBuilder pb = new ProcessBuilder("ls", System.getProperty("user.home"));
pb.inheritIO();
try {
    pb.start().waitFor();
} catch (InterruptedException e) {
    e.printStackTrace();
}