tags:

views:

200

answers:

3

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();
    }
+1  A: 

There could be an error. In this case you should also trap getErrorStream()

Chris Kannon
I tried trapping the ErrorStream and got "The system cannot find the path specified." But how can it not find c:\?
chama
+4  A: 

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.
Trevor Harrison
chama
@chama: What about simply using `dir /b /s C:\​`? Just for the fun of it: Try running your code from another drive, such as `D:`. Your `cd` command would do nothing there. Generally, use whatever is applicable and don't try to overcomplicate things. This is an example where you need exactly one command which will do what you want. That sequence of two won't.
Joey
+1  A: 
mobrule
that's a very good point. I was originally searching for a certain file in that folder. Unfortunately, taking out the /s didn't solve the problem
chama