我有一个执行的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”)的操作 在不同的目录上多次。
答案 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'。