Tutorial de Java

Argumentos en la Línea de Comandos

Anterior | Siguiente
En las aplicaciones, tanto C++ como Java, al ejecutarlas, se pueden especificar argumentos en la línea de llamada, y si los programas están preparados para aceptarlos, podrán tomarlos en cuenta. Los usuarios del sistema DOS estarán muy familiarizados con comandos del tipo
copy ficheroA ficheroB    

En donde copy es el nombre del programa y ficheroA y ficheroB son los argumentos de la línea de comandos.

Sin embargo, Java y C++ tratan de forma diferente los argumentos que se pasan en la línea de llamada. A los programadores C++ les resultarán familiares las líneas de código siguientes

void main( int argc,char *argv[] ) {
    . . .
    }

En este caso, el sistema operativo pasa dos parámetros a la función principal del programa. argc es un entero que indica el número de argumentos en la línea de comandos, y argv es un array de punteros, en donde cada puntero apunta a uno de los argumentos almacenados como cadena en algún lugar de la memoria. En algunos sistemas, argv[0] apunta a una cadena que contiene el nombre del programa y en otros apunta a basura. En C++, si el programa no ha sido escrito o preparado para recibir y tratar argumentos que se indiquen en la línea de comandos, no es necesario especificar nada en la declaración de la función main().

La sintaxis utilizada por Java es la que se ha visto en la miniaplicación inicial desarrollada al comienzo de esta sección

    public static void main( String args[] ) {
    . . .
    }    

En este caso, y a diferencia de C++, los parámetros sí deben aparecer en la declaración del método main(), aunque el programa Java no esté preparado para aceptar ninguno.

También, a diferencia de C++, el nombre del programa no se proporciona en Java y el número de elementos en el array se puede obtener a través del método length() del array, con lo que no es necesario que el sistema operativo indique cuántos parámetros hay en la línea de comandos.

Solamente como curiosidad, y también como muestra de una aplicación un poco más complicada que la impresión de un mensaje, el siguiente ejemplo, java301.java, imprime la lista de argumentos que se pasa a una aplicación Java.

class java301 {
    public static void main( String args[] ) {
        for( int i=0; i < args.length; i++ )
            System.out.println( args[i] );
        }
    }    

Si se compila y, posteriormente, ejecuta esta aplicación con la llamada que se muestra, lo que se obtiene en pantalla es lo que se muestra a continuación

% javac java301.java
% java java301 estos son los argumentos que se pasan
estos
son
los
argumentos
que
se
pasan

Por comparación solamente, el ejemplo java301.cpp, reproduce la versión C++ de la aplicación anterior, para mostrar por pantalla los argumentos que se pasan a la aplicación

#include <iostream.h>

class java301 {
    public:
        static void MiClase( int argc,char *argv[] );
    };

// El bucle requiere que esta función esté definida fuera de la
// clase (los bucles en C++ no permiten funciones inline)
void java301::MiClase( int argc,char *argv[] ) {
    for( int i=0; i < argc; i++ )
        cout << argv[i] << endl;
    }

void main( int argc,char *argv[] ) {
    java301::MiClase( argc,argv );
    }

Si se compila este código y se ejecuta con la siguiente llamada

C:\> c:\pruebas\java301 estos son los argumentos que se pasan

La salida que se genera en pantalla es:

c:\pruebas\java301
estos
son
los
argumentos
que
se
pasan

Navegador

Home | Anterior | Siguiente | Indice | Correo