这是一台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);
}
}
}发布于 2016-12-18 13:46:47
这是因为外壳程序将~替换为您的主目录的路径。您没有使用shell。相反,它就像您运行ls '~'一样,它给出了错误:
ls: cannot access '~': No such file or directory实际上,您可以看到当您将p.getInputStream()更改为p.getErrorStream()时,就会发生这种情况,这会使您的程序输出:
ls: cannot access '~': No such file or directory发布于 2016-12-18 13:47:56
您需要由外壳插入的~来获取主文件夹,相反,您可以从系统属性中读取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();
}https://stackoverflow.com/questions/41205780
复制相似问题