Inicializando programa con archivos pasados como argumentos principales (system.getProperty())
-
18-09-2019 - |
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 :(
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