Java Runtime.getRuntime (). Exec () завершается ошибкой после вызова его несколько сотен раз - PullRequest
4 голосов
/ 05 марта 2012

У меня есть Java-программа, которая выполняет Runtime.getRuntime (). Exec ("ls -l");много раз, по одному разу для каждого каталога в системе.

Моя тестовая система имеет более 1000 каталогов и Runtime.getRuntime (). exec ("ls -l");Кажется, ошибка после 480 каталогов или около того.Я получаю сообщение об ошибке «Ошибка запуска exec (). Команда: [ls, -l] Рабочая директория: null Среда: null».Я предполагаю, что у него заканчиваются некоторые системные ресурсы или нет?Есть ли способ обработать все каталоги без ошибок?

Относительный комментарий из ответа:

Я должен уточнить, что я использовал adb.exe из Android SDK.Я хотел выполнить что-то вроде Runtime.getRuntime (). Exec ("adb shell ls -l") несколько раз в разных каталогах.

Ответы [ 3 ]

7 голосов
/ 05 марта 2012

Вы должны явно закрыть потоки ввода / вывода при использовании 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(); 
    }
}
3 голосов
/ 05 марта 2012

Было бы лучше использовать java.io.File и соответствующие методы в этих классах для обхода и манипулирования файловой системой.

Вы не говорите , почему вы делаете это вырожденное поведение таким образом, но вот пример , перечисляющий все файлы в дереве .

0 голосов
/ 06 марта 2012

У меня есть Java-программа, которая выполняет Runtime.getRuntime (). Exec ("ls -l "); много раз, по одному разу для каждого каталога в системе.

Почему? Что-то не так с File.listFiles()?

Вам не нужно выполнять 'ls' ни разу.

...