调用它几百次后,Java Runtime.getRuntime()。exec()失败

时间:2012-03-05 18:39:16

标签: java android exec runtime.exec

我有一个执行的Java程序 Runtime.getRuntime()。exec(“ls -l”); 很多时候,系统中的每个目录一次。

我的测试系统有超过1,000个目录和Runtime.getRuntime()。exec(“ls -l”);似乎在480个目录之后出错了。 我得到的错误消息是“运行exec()时出错。命令:[ls,-l]工作目录:null环境:null”。 我猜它已经耗尽了一些必需的系统资源,或者是吗? 有没有办法处理所有目录而不会出错?

答案的相对评论:

  

我应该澄清一下我使用的是Android SDK的adb.exe。我想   执行类似Runtime.getRuntime()。exec(“adb shell ls -l”)的操作   在不同的目录上多次。

3 个答案:

答案 0 :(得分:7)

使用Runtime.getRuntime().exec时,您应该明确关闭输入/输出流。

Process p = null;
try {
    p = Runtime.getRuntime().exec("ls -l");
    //process output here
    p.waitFor();
} finally {
    if (p != null) {
        p.getOutputStream().close();
        p.getInputStream().close();
        p.getErrorStream().close(); 
    }
}

答案 1 :(得分:3)

最好在这些类上使用java.io.File和适当的方法来遍历和操作文件系统。

你没有说为什么你正在以这种方式做这种堕落行为,但这里是listing all the files in a tree的一个例子。

答案 2 :(得分:0)

  

我有一个Java程序,它执行Runtime.getRuntime()。exec(“ls   -l“);很多次,对于系统中的每个目录一次。

为什么呢? File.listFiles()出了什么问题?

你甚至不需要执行'ls'。