首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Runtime.getRuntime().exec("ls ~")不列出主目录的内容

Runtime.getRuntime().exec("ls ~")不列出主目录的内容
EN

Stack Overflow用户
提问于 2016-12-18 13:31:09
回答 2查看 1.1K关注 0票数 0

这是一台Linux机器,下面的代码没有产生任何输出,我很好奇为什么。附注:我没有读到需要转义代字号的内容,但无论如何都是用反斜杠转义代字号,javac指出了语法错误。

代码语言:javascript
复制
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);
        }
    }
}
EN

回答 2

Stack Overflow用户

发布于 2016-12-18 13:46:47

这是因为外壳程序将~替换为您的主目录的路径。您没有使用shell。相反,它就像您运行ls '~'一样,它给出了错误:

代码语言:javascript
复制
ls: cannot access '~': No such file or directory

实际上,您可以看到当您将p.getInputStream()更改为p.getErrorStream()时,就会发生这种情况,这会使您的程序输出:

代码语言:javascript
复制
ls: cannot access '~': No such file or directory
票数 1
EN

Stack Overflow用户

发布于 2016-12-18 13:47:56

您需要由外壳插入的~来获取主文件夹,相反,您可以从系统属性中读取user.home

代码语言:javascript
复制
Process p = Runtime.getRuntime().exec("ls " + System.getProperty("user.home"));

您也可以使用如下所示的ProcessBuilder来完成此操作

代码语言:javascript
复制
ProcessBuilder pb = new ProcessBuilder("ls", System.getProperty("user.home"));
pb.inheritIO();
try {
    pb.start().waitFor();
} catch (InterruptedException e) {
    e.printStackTrace();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41205780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档