|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2008
Messaggi: 97
|
[JAVA] - argomenti del MAIN
Buonasera,
volevo chiedere una informazione su una questione, credo, abbastanza semplice. Ho scritto un programma che deve eseguire le stesse operazioni, ma su esempi diversi, e per fare ciò accede a file diversi che ho caricato nel programma (sto usando Eclipse) Faccio prima se metto l'esempio pratico che a spiegarlo a parole. Inizialmente richiamavo un metodo con un file: Codice:
metodo_a (esempio1file_a.txt) metodo_b (esempio1file_b.txt) metodo_c (esempio1file_c.txt) Codice:
metodo_a ("esempio2file_a.txt")
metodo_b ("esempio2file_b.txt")
metodo_c ("esempio2file_c.txt")
Codice:
metodo_a ("data1/file_a.txt)
metodo_b ("data1/file_b.txt)
metodo_c ("data1/file_c.txt)
Mi hanno detto (non come però...) che invece è possibile migliorare ancora lavorando sulla dichiarazione del Main: Codice:
public static void main(String[] args) come faccio ad indicare la cartella giusta nella dichiarazione del main? grazie mille a chiunque voglia collaborare! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
|
Dunque; per eseguire il programma, una volta finiti gli sviluppi userai una sintassi del genere:
Codice:
java Main Codice:
java Main file1.txt dir/file2.txt dir2/file3.txt Codice:
public class Main{
public static void main(String[] args) {
for (String e : args)
System.out.println(e);
}
}
Codice:
java Main file1.txt dir/file2.txt dir2/file3.txt Codice:
file1.txt dir/file2.txt dir2/file3.txt Codice:
public class Main{
public static void main(String[] args) {
for (String e : args) {
metodo_a(e);
metodo_b(e);
metodo_c(e);
}
}
}
(In Eclipse, per aggiungere parametri click col destro sul progetto -> Run -> Run Configurations)
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO Ultima modifica di GByTe87 : 12-01-2012 alle 18:35. |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Oct 2008
Messaggi: 97
|
ehmm... prima di tutto ti ringrazio della risposta.
però non è che abbia capito proprio tutto quello che mi hai scritto. nel dettaglio, cosa fa esattamente quello che hai scritto tu? in particolare cosa fanno questo: Codice:
public class Main{
public static void main(String[] args) {
for (String e : args)
System.out.println(e);
}
}
Codice:
public class Main{
public static void main(String[] args) {
for (String e : args) {
metodo_a(e);
metodo_b(e);
metodo_c(e);
}
}
}
a vedere il for, che parrebbe applicato agli argomenti, io potrei applicare i vari metodi a cosa? cioè, io chiedevo solo una parametrizzazione che a seconda di casi mi permettesse di intervenire sul codice il meno possibile, indicando di volta in volta il nome della cartella che contiene i vari files che mi servono. mi stai dicendo che avendo più cartelle diverse, mettiamo 4 casi diversi, potrei far girare il programma invece che una volta sola, 4 volte tutte insieme sui 4 casi diversi? |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Quote:
Codice:
public class Main{
public static void main(String[] args) {
for (String e : args)
System.out.println(e);
}
}
|
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Oct 2008
Messaggi: 97
|
allora, in verità mi pare di capire che quanto mi è stato suggerito non era esattamente quello che volevo chiedere io, anzi è DECISAMENTE MEGLIO!
io volevo solo esplicitare nel main (o dove sia possibile) la cartella o il folder dope pescare i dati da dare in pasto al programma per farlo eseguire. io poi a manina avrei cambiato la singola dicitura del main di volta in volta per i diversi casi. avere la possibilità invece di far eseguire tutti i casi al programma in una volta sola invece è una idea ancora migliore. non ho però capito come dire al main "i dati sono qui, prendi questi e quelli", se posso dire in modo così barbaro. la linea di comando: Codice:
java Main file1.txt dir/file2.txt dir2/file3.txt poi: Codice:
public class Main{
public static void main(String[] args) {
for (String e : args)
System.out.println(e);
}
}
cosa fa questo? che significa che mi scrive e? cos'è e? o meglio, dove scrivo io cosa è e?
Codice:
public class Programma {
public static void main(String[] args) {
...
metodo_a ("data1/file_a.txt")
metodo_b ("data1/file_b.txt")
metodo_c ("data1/file_c.txt")
...
} //fine main
} //fine classe
invece cosa devo aggiungere per fare una semplice cosa del tipo Codice:
public class Programma {
public static void main(String[] args) {
...
metodo_a ("file_a.txt")
metodo_b ("file_b.txt")
metodo_c ("file_c.txt")
...
} //fine main
} //fine classe
grazie ancora |
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Oct 2008
Messaggi: 97
|
up!
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Ti darei una mano volentieri ma non ho ben capito cosa devi fare. I metodi perchè sono differenziati? Perchè ne hai uno a, uno b e uno c? Anche i file sono in qualche modo da differenziare?
|
|
|
|
|
|
#8 | |
|
Member
Iscritto dal: Oct 2008
Messaggi: 97
|
Quote:
poi mi era stata prospettata la possibilità di far eseguire in sequenza tutti i casi, uno dopo l'altro, ma non ho capito come... cioè, veramente pensavo fosse una questione davvero banale, e secondo me in effetti lo è veramente, ma non so come spiegarmi meglio.... |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Codice:
import java.io.File;
public class Prova {
public static void main(String[] args) {
for(String directory : args) {
File[] files = new File(directory).listFiles();
for(File f : files) {
System.out.println(f.toString());
}
}
}
}
Per passare le directory al tuo programma, dipende come lo esegui. Se lo lanci da terminale dovrai passarle tramite comando Codice:
java Prova directory1 directory2 directory3 Codice:
"C:\Documents and Settings\utente\workspace" "C:\Documents and Settings\utente" |
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Oct 2008
Messaggi: 97
|
grazie Ndakota della risposta.
allora, vediamo se ho capito. intanto devo impostare il programma in questo modo: Codice:
import java.io.File;
public class Prova {
public static void main(String[] args) {
for(String directory : args) {
File[] files = new File(directory).listFiles();
for(File f : files) {
metodo_a ("file_1");
metodo_b ("file_2");
metodo_c ("file_3");
}
}
}
}
Codice:
File[] files = new File(directory).listFiles(); e fatto ciò, usando io eclipse, dovrei andare a scrivere l'indirizzo nel mio pc di quelle cartelle, nello spazio Program arguments dove mi hai detto tu? comunque queste cartelle, che compaiono nel mio workspace, nello spazio che si è creato quando ho iniziato un nuovo project, sono visibili anche nella colonnina del package explorer della pagina di eclipse, non c'è un comando più diretto da programma? non c'è una cosa del tipo: Codice:
metodo_a ("data_h/file_1")
questo sarebbe per il caso in cui io volessi far girare il programma una sola volta, con una serie di dati, mentre ovviamente volendo far girare il programma n volte, su n diverse serie di dati, ok il for che mi avete spiegato, ma non potrei sempre indicare questa serie di cartelle da qualche parte nel programma? tornando all'esempio che mi hai dato tu, al posto della linea Codice:
System.out.println(f.toString()); |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Quote:
|
|
|
|
|
|
|
#12 | |
|
Member
Iscritto dal: Oct 2008
Messaggi: 97
|
Quote:
Codice:
t.riempimatrice ("data1/nodi_matrice.txt");
se io passo, come mi dici tu, la cartella con i miei file, poi nel corpo del programma non devo scrivere più niente di "variabile"? posso lasciare semplicemente i nomi dei file? come risolvo la questione dei diversi esempi a mia disposizione, ovvero i file nelle cartelle data1, data2, data3, ecc ecc? ti ringrazio della pazienza... |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:49.




















