Проблема с выводом cmd управляет в Java

Я пытаюсь читать в результатах команды cmd (dir, например). После создания процесса я использую a BufferedReader в сочетании с InputStreamReader. По некоторым причинам, BufferedReader продолжает подходить пустой, даже при том, что я знаю, что должен быть некоторый вывод, который будет считан.

Вот код, который я использую:

String[] str = new String[] {"cmd.exe", "/c", 
            "cd", "c:\\",
            "dir", "/b", "/s"               
    };
    Runtime rt = Runtime.getRuntime();
    try{

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

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

            fos.close();
        }
    }catch( Exception ex )
    {
        ex.printStackTrace();
    }
7
задан Anthony Forloney 4 February 2010 в 17:06
поделиться

3 ответа

У вас есть:

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

, что мне не кажется правильным. Вы не можете поместить несколько команд в cmd.exe в одну командную строку. Это командный файл.

Попробуйте избавиться от всего: от компакт-диска или каталога.

править: действительно:

C:\>cmd.exe /c cd c:\ dir
The system cannot find the path specified.
5
ответ дан 7 December 2019 в 07:45
поделиться

Возможно, произошла ошибка. В этом случае вы также должны перехватить getErrorStream ()

1
ответ дан 7 December 2019 в 07:45
поделиться

Вы выполняете команду cmd.exe / c cd c: \ dir / b / s . Я не думаю, что это происходит так, как вы ожидаете.


Я имею в виду, что вы объединили две команды в одну строку, и оболочке Windows это, вероятно, не нравится. Попробуйте что-нибудь вроде

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

&& скажет оболочке выполнить cd c: \ , а затем выполнить dir / b / s , если первая команда была успешный.

1
ответ дан 7 December 2019 в 07:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: