Programme avec les fichiers Initialisation passés comme arguments principaux (System.getProperty ())

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

Question

Je dois exécuter mon programme avec cette ligne:

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

J'ai essayé de comprendre comment faire cela, mais ne peut pas vraiment le faire fonctionner. J'utilise Netbeans depuis je ne comprends vraiment avec classpaths terminaux unix et ainsi de suite.

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

FileIn devient nulle à la suite de la déclaration précédente.

Je viens juste de commencer avec -DImport = data.txt, après que je le résoudre, je vais essayer les autres.


Cette partie est fait, Je vous remercie. Je vais essayer de mettre stdin comme fichier -DIN au lieu du clavier. Merci


Je l'ai fait ce que vous avez dit cartoonfox, son impression null importation qui signifie FileIn isnt recevoir une chaîne de System.getProperty ( "Importer");

Je reçois également cet avertissement:

avertissement: [deprecation] readLine () dans java.io.DataInputStream a été abandonné                 ligne = dis.readLine ();

J'utilise le code de cette page: http://www.java-tips.org/java-se-tips/java.io/how-to-read-file-in-java.html depuis Je ne sais pas beaucoup de lecteurs: (

Était-ce utile?

La solution

Je pense que vous confondez 2 concepts:

  • Java args fait référence aux paramètres passés après le nom de la classe. Donc, si vous appelez:
  

java main.MyMain 0 1 2

votre args sera:

  

args [0] = 0

     

args [1] = 1

     

args [2] = 2

  • Java propriétés sont ce que vous passez avec -D comme dans -DImport = donnees.txt

Dans votre code, vous mélangez les deux. Supprimez la ligne

  

if (args.length == 1)

et il fonctionnera:)

Autres conseils

baisse if (args.length == 1) que vous n'êtes pas analyser les arguments, mais la définition des propriétés du système.

arguments du programme vont après la classe principale comme celui-ci

main.Main arg1=val arg2=val2

Pensez à -Import = foo comme un moyen de mettre l'option de configuration "Importer" pour la valeur "toto".

Il suffit de déposer l'instruction if:

public static void main(String[] args) {

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

BTW Je pense que Sun a choisi -D (par opposition à - autre chose) parce que beaucoup de compilateurs C vous permettent de définir une macro sur la ligne de commande avec -D - ce qui signifie qu'il serait un moyen de réglage nommé « constantes » sur la ligne de commande ... qui est similaire à ce qu'il fait en Java.

Je ne sais pas pourquoi vous obtenez nulle exécution de ce, alors voici une transcription de me compiler et exécuter -. Avec sortie Vous allez devoir examiner les différences entre ce que vous faites et ce que je fais dans cette transcription:

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top