Pregunta

Estoy tratando de utilizar cmd.exe para buscar un archivo en un directorio específico y luego mostrar la ruta en un programa Java y escribir en un archivo. El problema es que el proceso nunca termina.

Aquí está mi código:

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();
            }
¿Fue útil?

Solución

Por favor, intente

cmd /c

en lugar de simplemente

cmd

Referencia

Otros consejos

Runtime.exec no funciona de esa manera. No se puede pasar varios comandos por el estilo a cmd.exe.

Runtime.exec le permite ejecutar un solo proceso con una lista de argumentos. No proporciona ninguna operación de "concha" (como 2>&1 por ejemplo). Debe hacer ese tipo de redirección de IO sí mismo utilizando los flujos de entrada / salida.

Es similar a llamar a la función main de otro programa.

Usted podría intentar `Runtime.exec (nueva String [] { "cmd.exe", "/ c", "dir", "C: \\"});

Pero, siendo realistas, si quieres listados de archivos, es mucho mejor usar las instalaciones de la clase java.io.File, que no dependen de las funciones específicas del sistema operativo.

¿Por qué no usar Java para hacer salto de directorio en lugar de llamar comando externo concha? Esto hace que su código no portátil!

Debe utilizar el comando de arranque, además del proceso de cmd.exe con el modificador / C o / k antes de la orden de arranque. Ejemplo: para convertir el intérprete de comandos de Windows en una consola bash (desde el prroject MinGW) se debe invocar el método exec de la clase en tiempo de ejecución con el comando "C: \ Windows \ System32 \ cmd.exe / C empiecen C: \ MinGW \ MSYS \ 1.0 \ bin \ bash.exe"(yo uso un comando externo en lugar de una interna porque es más significante pero se puede usar como comando interno DIR y así sucesivamente).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top