Buscar..


Sintaxis

  • Public static void main (String [] args)

Parámetros

Parámetro Detalles
args Los argumentos de la línea de comandos. Suponiendo que el lanzador de Java invoca el método main , args no será nulo y no tendrá elementos null .

Observaciones

Cuando se lanza una aplicación Java normal usando el comando java (o equivalente), se llamará a un método main , pasando los argumentos desde la línea de comando en la matriz args .

Desafortunadamente, las bibliotecas de clase de Java SE no proporcionan ningún soporte directo para el procesamiento de argumentos de comando. Esto te deja dos alternativas:

  • Implementar el procesamiento de argumentos a mano en Java.
  • Hacer uso de una biblioteca de terceros.

Este tema intentará cubrir algunas de las bibliotecas de terceros más populares. Para obtener una lista extensa de las alternativas, consulte esta respuesta a la pregunta de StackOverflow "¿Cómo analizar los argumentos de la línea de comandos en Java?" .

Procesamiento de argumentos utilizando GWT ToolBase

Si desea analizar argumentos de línea de comando más complejos, por ejemplo, con parámetros opcionales, lo mejor es utilizar el enfoque GWT de Google. Todas las clases son públicas disponibles en:

https://gwt.googlesource.com/gwt/+/2.8.0-beta1/dev/core/src/com/google/gwt/util/tools/ToolBase.java

Un ejemplo para manejar la línea de comandos myprogram -dir "~/Documents" -port 8888 es:

public class MyProgramHandler extends ToolBase {
   protected File dir;
   protected int port;
   // getters for dir and port
   ...

   public MyProgramHandler() {
       this.registerHandler(new ArgHandlerDir() {
            @Override
            public void setDir(File dir) {
                this.dir = dir;
            }
       });
       this.registerHandler(new ArgHandlerInt() {
            @Override
            public String[] getTagArgs() {
               return new String[]{"port"};
            }
            @Override
            public void setInt(int value) {
               this.port = value;
            }
       });
   }
   public static void main(String[] args) {
      MyProgramHandler myShell = new MyProgramHandler();
      if (myShell.processArgs(args)) {
         // main program operation
         System.out.println(String.format("port: %d; dir: %s",
            myShell.getPort(), myShell.getDir()));
      }
      System.exit(1);
   }
}

ArgHandler también tiene un método isRequired() que se puede sobrescribir para decir que se requiere el argumento de la línea de comandos (el retorno predeterminado es false por lo que el argumento es opcional.

Procesando argumentos a mano

Cuando la sintaxis de la línea de comandos para una aplicación es simple, es razonable realizar el procesamiento de los argumentos del comando completamente en código personalizado.

En este ejemplo, presentaremos una serie de estudios de casos simples. En cada caso, el código generará mensajes de error si los argumentos son inaceptables, y luego llame a System.exit(1) para decirle al shell que el comando ha fallado. (Supondremos en cada caso que el código Java se invoca mediante un contenedor cuyo nombre es "myapp").

Un comando sin argumentos.

En este estudio de caso, el comando no requiere argumentos. El código ilustra que args.length nos da el número de argumentos de línea de comando.

public class Main {
    public static void main(String[] args) {
        if (args.length > 0) {
            System.err.println("usage: myapp");
            System.exit(1);
        }
        // Run the application
        System.out.println("It worked");
    }
}

Un comando con dos argumentos.

En este estudio de caso, el comando requiere precisamente dos argumentos.

public class Main {
    public static void main(String[] args) {
        if (args.length != 2) {
            System.err.println("usage: myapp <arg1> <arg2>");
            System.exit(1);
        }
        // Run the application
        System.out.println("It worked: " + args[0] + ", " + args[1]);
    }
}

Tenga en cuenta que si no args.length , el comando se bloquearía si el usuario lo ejecutara con muy pocos argumentos de línea de comandos.

Un comando con opciones de "bandera" y al menos un argumento

En este estudio de caso, el comando tiene un par de opciones de marca (opcionales) y requiere al menos un argumento después de las opciones.

package tommy;
public class Main {
    public static void main(String[] args) {
        boolean feelMe = false;
        boolean seeMe = false;
        int index;
        loop: for (index = 0; index < args.length; index++) {
            String opt = args[index];
            switch (opt) {
            case "-c":
               seeMe = true;
               break;
            case "-f":
               feelMe = true;
               break;
            default:
               if (!opts.isEmpty() && opts.charAt(0) == '-') {
                   error("Unknown option: '" + opt + "');
               }
               break loop;
            }
        }
        if (index >= args.length) {
            error("Missing argument(s)");
        }      
        
        // Run the application
        // ...
    }

    private static void error(String message) {
        if (message != null) {
            System.err.println(message);
        }
        System.err.println("usage: myapp [-f] [-c] [ <arg> ...]");
        System.exit(1);
   }
}

Como puede ver, el procesamiento de los argumentos y las opciones se vuelve un tanto engorroso si la sintaxis del comando es complicada. Es recomendable utilizar una biblioteca de "análisis de línea de comando"; ver los otros ejemplos



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow