Inicializando programa con archivos pasados ​​como argumentos principales (system.getProperty())

StackOverflow https://stackoverflow.com/questions/1693744

Pregunta

Tengo que ejecutar mi programa con esta línea:

java -DImport=data.txt -Din=input.dat -Dout=output1.dat main.Main

He estado tratando de descubrir cómo hacer esto pero realmente no puedo hacerlo funcionar.Estoy usando Netbeans porque realmente no me llevo bien con las rutas de clases de terminales Unix y demás.

public static void main(String[] args) {    
    String fileIn;
    fileIn = System.getProperty ("Import");
}

fileIn se vuelve nulo como resultado de la declaración anterior.

Recién estoy comenzando con -DImport=data.txt, después de resolverlo probaré los demás.


Esa parte ya está hecha, gracias.Intentaré configurar stdin como archivo -Din en lugar de teclado.Gracias


Hice lo que dijiste cartoonfox. Está imprimiendo Import null, lo que significa que fileIn no recibe ninguna cadena de System.getProperty ("Importar");

También recibo esta advertencia:

advertencia:Depreción] Readline () en java.io.datainputStream se ha despreciado en línea = dis.readline ();

Estoy usando código de esta página: http://www.java-tips.org/java-se-tips/java.io/how-to-read-file-in-java.html ya que no conozco mucho a los lectores :(

¿Fue útil?

Solución

Creo que estás confundiendo 2 conceptos:

  • Java argumentos se refiere a los parámetros pasados ​​después del nombre de la clase.Entonces si llamas:

java principal.MyMain 0 1 2

su argumentos será:

argumentos[0] = 0

argumentos[1] = 1

argumentos[2] = 2

  • Java propiedades son lo que estás pasando con -D como en -DImport=datos.txt

En tu código estás mezclando ambos.quitar la linea

si (args.longitud == 1)

y funcionará :)

Otros consejos

if (args.length == 1) caída, ya que no está analizando los argumentos, pero el establecimiento de las propiedades del sistema.

argumentos de programa ir después de la clase principal como esto

main.Main arg1=val arg2=val2

Piense en -Import = foo como una forma de establecer la opción de configuración "de importación" poner en valor "foo".

Sólo tienes que arrastrar la sentencia if:

public static void main(String[] args) {

String fileIn;
fileIn = System.getProperty ("Import");
System.out.println("Import "+fileIn);
}

Por cierto creo que Sun eligió -D (en contraposición a - otra cosa) porque muchos de los compiladores de C le permiten establecer una macro en la línea de comandos con -D - lo que significa que sería una forma de establecer "constantes" nombradas en la línea de comandos ... que es similar a lo que hace en Java.

No estoy seguro de por qué se obtendría nula ejecución de este, así que aquí está una transcripción de mí compilarlo y ejecutarlo -. Con salida Vas a tener que mirar las diferencias entre lo que está haciendo y lo que estoy haciendo en esta transcripción:

Script started on Sat Nov  7 18:16:25 2009
bash-3.2$ cat T.java
public class T {

public static void main(String[] args) {

String fileIn;
fileIn = System.getProperty ("Import");
System.out.println("Import "+fileIn);
}
}
bash-3.2$ javac T.java
bash-3.2$ java -DImport=data.txt -Din=input.dat -Dout=output1.dat T
Import data.txt
bash-3.2$ exit
exit

Script done on Sat Nov  7 18:17:07 2009
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top