调用它几百次后,Java Runtime.getRuntime()。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”)之类的东西。

使用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(); } } 

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

您没有说明为什么要以这种方式执行此退化行为,但这是列出树中所有文件的示例。

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

为什么? File.listFiles()什么问题?

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