Команда CMD.exe в Java не прекращается - PullRequest
3 голосов
/ 04 февраля 2010

Я пытаюсь использовать cmd.exe для поиска файла в определенном каталоге, а затем отобразить путь в Java-программе и записать его в файл. Проблема в том, что процесс никогда не завершается.

Вот мой код:

String[] str = new String[] { "cmd.exe ", "cd c:\\",
                        " dir /b /s documents", "2>&1" };

            Runtime rt = Runtime.getRuntime();
            try{

                Process p = rt.exec(str);
                InputStream is =p.getInputStream();
                InputStreamReader in = new InputStreamReader(is);


                StringBuffer sb = new StringBuffer();
                BufferedReader buff = new BufferedReader(in);
                String line = buff.readLine();
                while( line != null )
                {
                    sb.append(line + "\n");
                    line = buff.readLine();
                }
                System.out.println( sb );
                File f = new File("test.txt");
                FileOutputStream fos = new FileOutputStream(f);
                fos.write(sb.toString().getBytes());
                fos.close();

            }catch( Exception ex )
            {
                ex.printStackTrace();
            }

Ответы [ 4 ]

1 голос
/ 04 февраля 2010

Runtime.exec не работает таким образом. Вы не можете передавать несколько таких команд cmd.exe.

Runtime.exec позволяет выполнить один процесс со списком аргументов. Он не предоставляет никаких операций «оболочки» (например, 2>&1). Вы должны сделать такое перенаправление ввода-вывода самостоятельно, используя потоки ввода / вывода.

Это похоже на вызов функции main другой программы.

Вы можете попробовать `Runtime.exec (новая строка [] {" cmd.exe "," / c "," dir "," C: \\ "});

Но на самом деле, если вам нужны списки файлов, вам гораздо лучше использовать средства класса java.io.File, которые не будут зависеть от особенностей операционной системы.

1 голос
/ 04 февраля 2010

Пожалуйста, попробуйте

cmd /c

вместо простого

cmd

Ссылка

0 голосов
/ 30 января 2014

Вы должны использовать команду запуска в дополнение к процессу cmd.exe с ключом / C или / K ДО команды запуска. Пример: чтобы преобразовать интерпретатор команд Windows в консоль bash (из проекта mingw), необходимо вызвать метод exec класса Runtime с помощью команды «C: \ Windows \ System32 \ cmd.exe / C start C: \ mingw \ msys \ 1.0 \ bin \ bash.exe "(я использую внешнюю команду, а не внутреннюю, потому что она важнее, но вы можете использовать внутреннюю команду, такую ​​как DIR и т. д.).

0 голосов
/ 05 февраля 2010

почему не используется Java для обхода каталога вместо вызова внешней команды оболочки? Это делает ваш код не переносимым!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...