Paso de argumentos por consola/terminal

Introducción

Vamos a ver otra forma (ya menos usada en la actualidad) de mandar datos a nuestro programa desde la ejecución de un programa. Siempre serán datos de entrada. Hoy dos alternativas, por terminal o por el IDE.

Mandar datos a traves de terminal

Para ello al ejecutar un programa en Java, con el nombre de la clase sin la extensión y a continuación los parámetro/s de entrada con espacios:

javac MyCompute.java
java MyCompute 4

Logicamente antes hay que compilar. Y en el ejemplo anterior a nuestro programa MyCompute le mandaríamos un “4”.

Usando un IDE

Usando un entorno de desarrollo como Eclipse hay que acceder sobre una clase que tenga main, “Run As”, “Run Configurations”, pestaña “Arguments”, introducimos los parámetros en “Program arguments” y ejecutamos:

IDE Eclipse

Tener cuidado en “Run Configurations” en elegir el proyecto y la clase correcta.

¿Cómo se recogen los datos de entrada?

En la cabecera del método main tenemos un arrays de Strings que se llama por defecto args:

public class HelloCommandLineArguments {
   
    public static void main( String[] args ){
       
        // Check if a command line argument exists
        if(args.length == 0)
            System.exit(0);
           
        // Display the arguments from the command line
        for(int counter = 0; counter < args.length; counter++){
            System.out.println("argument index " + counter + ": " + args[counter]);  
        }
    }

}

En el anterior ejemplo podemos comprobar si el programa recibe datos de entrada (si no hay termina) y en caso afirmativo mostrarlos por pantalla. Siempre recibiremos datos en String y se comportará args como un array unidimesional normal.

Novedad con varargs

Lo hemos visto con arrays unidimensionales en el anterior punto, nos podemos encontrar con un main de esta forma:

public class SimpleTesting {
  public static void main(String... args) {
    String val1 = args[0];
    String val2 = args[1];
    System.out.println(val1);
    System.out.println(val2);
  }
}
}

Fuente: enlace