en Java, ¿por qué no puedo pasar una cadena de invocación de más de 94 caracteres a Runtime.getRuntime (). exec ()?

Estoy tratando de invocar un archivo .bat desde una aplicación de Java. Parece simple, pero tengo 2 problemas y realmente agradecería algunos consejos:

  1. El siguiente código no puede ejecutar el archivo bat porque la cadena de argumento es más larga que 94 caracteres. si uso exactamente 94 caracteres (al eliminar la 'x' final del final de la clientArgscadena) el archivo bat se ejecuta bien.
    (mismo problema si uso la invocación alternativa y paso los argumentos como String[]) de
    todos modos, necesito poder pasar cadenas de comando mucho más largas (~ 150 caracteres)

  2. Si modifico clientArgspara que no incluya el nombre completo del archivo sino solo el nombre corto (ya que estoy especificando el directorio de trabajo) obtengo:

    java.io.IOException: Cannot run program "client.bat" (in directory "C:\2\code\FlaFl\flafl-0.7-RC2"): CreateProcess error=2, The system cannot find the file specified

Aquí está el código:

public static void main(String[] args) {  
    String CMD_FILE_NAME = "client.bat"; //cmd or bat - still limit'n is 94 chars
    String cmdFileFolder= "C:/2/code/FlaFl/flafl-0.7-RC2/"; 
    File workingDir = new File(cmdFileFolder);
    String clientArgs = cmdFileFolder + 
         CMD_FILE_NAME + " -host name12.mycompanyname3.com -app hive"
         + "123456789 34x";  //95 chars fails. remove the x to get it to work
    System.out.println("length of invoc str is "+clientArgs.length());
    Process process=null;
    try {
         process = Runtime.getRuntime().exec(clientArgs,null,workingDir);
    } catch (IOException e) {
         System.out.println("exception "+e);
    }
    //sleep(2000);
    //if (process!=null)
    //    process.destroy();
}
Respuesta 1

De http://en.wikipedia.org/wiki/COMMAND.COM

La longitud de la línea de comando en modo interactivo está limitada a 126 caracteres.

Esta podría ser la causa de su problema.

Puede crear un .batarchivo y ejecutarlo en su lugar.

Respuesta: 2

Java Doc de Exec sugiere

ProcessBuilder.start () es ahora la forma preferida de iniciar un proceso con un entorno modificado.

Respuesta: 3

Intenta usar el siguiente código:

public static void main(String[] args) {
    String CMD_FILE_NAME = "client.bat"; // cmd or bat - still limit'n is 94
                                            // chars
    String cmdFileFolder = "C:/2/code/FlaFl/flafl-0.7-RC2/";
    File workingDir = new File(cmdFileFolder);
    String clientArgs = CMD_FILE_NAME
            + " -host name12.mycompanyname3.com -app hive"
            + "123456789 34x"; // 95 chars fails. remove the x to get it to
                                // work
    System.out.println("length of invoc str is " + clientArgs.length());
    Process process = null;
    try {
        process = Runtime.getRuntime().exec(clientArgs, null, workingDir);
    } catch (IOException e) {
        System.out.println("exception " + e);
    }
    // sleep(2000);
    // if (process!=null)
    // process.destroy();
}

Usted está dando el cmdFileFoldercomando, es decir, el directorio de trabajo en el código mientras pasa workingDiral Runtime.exec()método.

Respuesta: 4

Estoy desarrollando una aplicación simple basada en MySQL de Java y durante la inserción de datos en la base de datos obtengo un error de SQL mencionado a continuación. Aquí está mi código: public DBConnection () {try {...

Bueno, esto en realidad es de dos partes ... Primero, necesito leer el contenido del archivo, criptándolos en un byte [] escribir el byte [] en un archivo o lo que sea ... Luego, el resultado del # 2 o # 3 entrará en ...

Estoy tratando de automatizar la creación de un proyecto Eclipse Java. Necesito una manera de hacer esto usando la línea de comando. Encontré muchos artículos para esto para CDT, pero no para el de Java. ¿Hay alguna manera de ...

Uso Java 7. Me gustaría extraer el idioma y el país de una Cadena que represente un nombre de archivo de paquete o un nombre de archivo de propiedades. El nombre del archivo no contiene la extensión. Por ejemplo paquete ...