I am trying to read in the results of a cmd command (dir for example). After creating the process, I use a BufferedReader
in conjunction with an InputStreamReader
. For some reason, the BufferedReader
keeps coming up empty, even though I know that there must be some output to be read.
Here is the code I'm using:
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();
}
You've got:
String[] str = new String[] {"cmd.exe", "/c",
"cd", "c:\\",
"dir", "/b", "/s"
};
which doesn't seem right to me. You can't put multiple commands to cmd.exe on one command line. Thats a batch file.
Try getting rid of everything either the cd or the dir.
edit: indeed:
C:\>cmd.exe /c cd c:\ dir
The system cannot find the path specified.
There could be an error. In this case you should also trap getErrorStream()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With