Existe un proyecto de Martian Software Inc. llamado JSAP, que será de gran ayuda para este tipo de cosas. Lo descubrí casi de casualidad y me parece una maravilla. Pero veamos un ejemplo: Imaginemos un programa que lee de un archivo una serie de datos, los procesa, y los escribe en un archivo de salida, exceptuando los datos que generan alguna incidencia que son grabados en un tercer archivo de errores, la aplicación además parará cuando se produzcan un número de errores igual al indicado en otro parámetro, es decir el clásico problema de metodología Warnier.
El programa debería ejecutarse con un comando del estilo de:
java com.trapallada.programa -i entrada.txt -o salida.txt -e errores.txt -n 500
donde los parámetros podrían ser aparecer en cualquier orden.
/* * Por CNG (www.trapallada.com). */ public static void main(String[] args) { try { JSAP jsap = new JSAP(); // Se crean los diferentes parámetros: // Parámetro del fichero de entrada FlaggedOption optEntrada = new FlaggedOption("Fichero de Entrada") .setStringParser(JSAP.STRING_PARSER) .setRequired(true) .setShortFlag('i') .setLongFlag("input"); // Parámetro del fichero de salida FlaggedOption optSalida = new FlaggedOption("Fichero de Salida") .setStringParser(JSAP.STRING_PARSER) .setRequired(true) .setShortFlag('o') .setLongFlag("output"); // Parámetro del fichero de errores FlaggedOption optErrores = new FlaggedOption("Fichero de Errores") .setStringParser(JSAP.STRING_PARSER) .setRequired(true) .setShortFlag('e') .setLongFlag("errores"); // Parámetro del fichero de número de errores (no obligatorio) FlaggedOption optNumeroErrores = new FlaggedOption("Número de Errores") .setStringParser(JSAP.INTEGER_PARSER) .setRequired(false) .setShortFlag('n') .setLongFlag("numErrores"); // Registramos los parámetros jsap.registerParameter(optEntrada); jsap.registerParameter(optSalida); jsap.registerParameter(optErrores); jsap.registerParameter(optNumeroErrores); // Se procesan los argumentos de la línea de comandos JSAPResult config = jsap.parse(args); // Si se produce algún error generamos el mensaje de error con JSAP. if (!config.success()) { System.err.println(); System.err.println("Uso: java " + Lector.class.getName()); System.err.println(" " + jsap.getUsage()); System.err.println(); System.exit(1); } // Se recogen los datos del la configuración cargada desde los // parámetros de la línea de comandos. String entrada = config.getString(optEntrada.getID()); String salida = config.getString(optSalida.getID()); String errores = config.getString(optErrores.getID()); Integer numErrores = new Integer(config.getInt(optNumeroErrores.getID())); } catch (Exception e) { e.printStackTrace(); } }
Esto sería lo que devolvería la ejecución de la clase en el caso de no poner nada a continuación de la llamada a la misma (sin parámetros).
Uso: java com.trapallada.programa
(-i|--input) <Fichero de Entrada> (-o|--output) <Fichero de Salida> (-e|--errores) <Fichero de Errores> [(-n|--numErrores) <Número de Errores>]
No hay comentarios:
Publicar un comentario