这是一台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);
}
}
}
答案 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();
}