Я пытаюсь читать в результатах команды 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();
}
У вас есть:
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.
Возможно, произошла ошибка. В этом случае вы также должны перехватить getErrorStream ()
Вы выполняете команду 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
, если первая команда была успешный.