Inizializzazione del programma con i file passati come argomenti principali (system.getProperty())
-
18-09-2019 - |
Domanda
Devo eseguire il mio programma con questa riga:
java -DImport=data.txt -Din=input.dat -Dout=output1.dat main.Main
Ho cercato di capire come farlo ma non riesco davvero a farlo funzionare.Sto usando Netbeans poiché non vado molto d'accordo con i percorsi di classe del terminale Unix e così via.
public static void main(String[] args) {
String fileIn;
fileIn = System.getProperty ("Import");
}
fileIn ottiene null come risultato dell'istruzione precedente.
Sto appena iniziando con -DImport=data.txt, dopo averlo risolto proverò gli altri.
Quella parte è fatta, grazie.Proverò a impostare stdin come file -Din anziché come tastiera.Grazie
Ho fatto quello che hai detto cartoonfox, stampa Import null il che significa che fileIn non riceve alcuna stringa da System.getProperty("Import");
Ricevo anche questo avviso:
avvertimento:deprecation] readline () in java.io.datainputStream è stato deprecato Line = dis.readline ();
Sto usando il codice da questa pagina: http://www.java-tips.org/java-se-tips/java.io/how-to-read-file-in-java.html dato che non conosco molto i lettori :(
Soluzione
Penso che si sta confondendo 2 concetti:
- Java args si riferisce a parametri passati dopo il nome della classe. Quindi, se si chiama:
java main.MyMain 0 1 2
tuo args sarà:
args [0] = 0
args [1] = 1
args [2] = 2
- Java Proprietà sono ciò che si sta passando con -D come in -DImport = data.txt
Nel codice si stia mescolando entrambi. Rimuovere la riga
if (args.length == 1)
e funzionerà:)
Altri suggerimenti
if (args.length == 1)
caduta come non si è argomenti siano stati analizzati, ma l'impostazione delle proprietà di sistema.
argomenti del programma vanno dopo la classe principale come questo
main.Main arg1=val arg2=val2
Pensa a -Import=foo come un modo per impostare l'opzione di configurazione "Importa" sul valore "foo".
Basta rilasciare l'istruzione if:
public static void main(String[] args) {
String fileIn;
fileIn = System.getProperty ("Import");
System.out.println("Import "+fileIn);
}
A proposito, penso che Sun abbia scelto -D (al contrario di - qualcos'altro) perché molti compilatori C ti consentono di impostare una macro sulla riga di comando con -D - il che significa che sarebbe un modo per impostare le "costanti" denominate sul comando -linea...che è simile a quello che fa in Java.
Non sono sicuro del motivo per cui otterresti null eseguendo questo, quindi ecco una trascrizione di me che lo compilo e lo eseguo, con l'output. Dovrai esaminare le differenze tra ciò che stai facendo e ciò che sto facendo in questa trascrizione:
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