Scusate la domanda che probabilmente sarà mooolto fagiana, ma esiste un comando simile al System("nomecomando"); del C in JAVA?
Scusate la domanda che probabilmente sarà mooolto fagiana, ma esiste un comando simile al System("nomecomando"); del C in JAVA?
Sai dirmi cosa fa questo comando in C?
Già vero una domanda pertinente!
richiama un comando del OS sottostante (credo sia solo per gli Unix!)
Allora... in Java è possibile richiamare qualsiasi tipo di eseguibile mediante la classe Runtime:
<nome del file> è una stringa con il percorso ed il nome del file da eseguire.codice:Runtime r = Runtime.getRuntime(); r.exec( <nome del file>);
Se intendi richiamare dei comandi interni (tipo DIR, CD...) non credo che sia possibile. Se qualcuno conosce un modo, sono ben lieto di apprenderlo!!
Ciao.
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
fammi capire se voglio richiamare un programma di sistema come cd o ls non se ne parla ma se richiamo un eseguibile che io creo in C non ci sono problemi??
Perchè se è così non ha molto senso! Dopotutto il mio eseguibile è tale quale a quelli di sistema, forse gli va dato il nome completo a partire dalla radice /!
Non è che non abbia senso: Java deve essere indipendente dalla piattaforma, quindi nessun legame con il sistema operativo in uso.
Poi... in Linux un ls lo puoi richiamare perchè è un eseguibile... basta che tu gli dia il percorso completo, ma sotto Windows/DOS un DIR non lo chiamerai mai, in quanto è un comando interno (residente dentro a COMMAND.COM o CMD.EXE a seconda della versione di Win).
Ciao.
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
Originariamente inviato da LeleFT
Allora... in Java è possibile richiamare qualsiasi tipo di eseguibile mediante la classe Runtime:
<nome del file> è una stringa con il percorso ed il nome del file da eseguire.codice:Runtime r = Runtime.getRuntime(); r.exec( <nome del file>);
Se intendi richiamare dei comandi interni (tipo DIR, CD...) non credo che sia possibile. Se qualcuno conosce un modo, sono ben lieto di apprenderlo!!
Ciao.
per il fatto che java deve essere svincolato dalla piattaforma sono d'accordo, ma è una questione puramente "filosofica", dal momento in cui se ne ho bisogno posso comunque usare comandi proprietari di una piattaforma e perdere la portabilità... a mia scelta.
comunque i comandi da te citati, nel caso di linux si possono richiamare perchè sono dei veri e propri files binari eseguibili che risiedono o in /usr/bin o in /bin o in /usr/sbin o in /sbin...
quindi anche il vdir, ls, find, grep, chmod... qualsiasi comando della shell può essere richiamato da java nelmodo da te citato.
per quanto riguarda windows, per quello che ne so io, il meccanismo di base degli strumenti da console è a suo modo semplificato, nel senso che ci sono sempre n. eseguibili (vedi netstat, format, copy, ecc...) ma il resto dei "comandi" è parsato dal tristissimo "interprete dei comandi" , il buon vecchio command.com o cmd o come si chiama con i windows odierni
quindi ipoteticamente passando come parametro al command un istruzione tipo "dir", a quanto ne so io, si ottiene l'esecuzione del comando e l'output sullo stdout.
dato che non uso windows non posso accertarmi personalmente dell'efficacia di questo sistema, ma se qualcuno lo prova non fa un soldo di danno..
E' vero... ma la filosofia Java non ne sa nulla delle tue scelte... il fatto che tu decida di usare comandi proprietari e di perdere la portabilità non ha nulla a che vedere con la portabilità intrinseca di Java.Originariamente inviato da trevor
per il fatto che java deve essere svincolato dalla piattaforma sono d'accordo, ma è una questione puramente "filosofica", dal momento in cui se ne ho bisogno posso comunque usare comandi proprietari di una piattaforma e perdere la portabilità... a mia scelta.
In alcuni casi, per esempio, io ho optato di avviare dei comandi, basandomi sul fatto che Linux se ne frega delle estensioni: in questo modo, che io abbia un PIPPO.EXE compilato per Windows oppure uno shell script per linux chiamato PIPPO.EXE, la mia applicazione rimane portabile... a meno del file esterno! :gren:
Infatti... è quello che ho detto anch'io! :gren:
comunque i comandi da te citati, nel caso di linux si possono richiamare perchè sono dei veri e propri files binari eseguibili che risiedono o in /usr/bin o in /bin o in /usr/sbin o in /sbin...
quindi anche il vdir, ls, find, grep, chmod... qualsiasi comando della shell può essere richiamato da java nelmodo da te citato.
Purtroppo questo accade solo ipoteticamente, come hai giustamente detto tu... ho effettuato delle prove. CMD.EXE vuole questa sintassi:
per quanto riguarda windows, per quello che ne so io, il meccanismo di base degli strumenti da console è a suo modo semplificato, nel senso che ci sono sempre n. eseguibili (vedi netstat, format, copy, ecc...) ma il resto dei "comandi" è parsato dal tristissimo "interprete dei comandi" , il buon vecchio command.com o cmd o come si chiama con i windows odierni
quindi ipoteticamente passando come parametro al command un istruzione tipo "dir", a quanto ne so io, si ottiene l'esecuzione del comando e l'output sullo stdout.
dato che non uso windows non posso accertarmi personalmente dell'efficacia di questo sistema, ma se qualcuno lo prova non fa un soldo di danno..
di conseguenza ho fatto questo semplicissimo programmino:codice:CMD /C <nome_comando> <nome_comando>: il comando da eseguire (quindi anche comando interno).
Risultato: nulla!codice:class Prova { public static void main(String [] args) { String [] comando = {"CMD.EXE", "/C", "DIR"}; try { Runtime r = Runtime.getRuntime(); r.exec(comando); } catch (Exception e) { e.printStackTrace(); } } }
L'applicazione si avvia e termina senza produrre nessun output. Il comando, a quanto pare, viene interpretato correttamente, ma di vederne i risultati non se ne parla.
Comunque non vedo l'utilità di eseguire comandi come questi... sarà perchè non ne ho mai avuto bisogno.
Ciao.
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
ciao ragazzi secondo voi perchè non funziona questo comando?
o meglio, funziona ma non crea il file datttcodice:Runtime r=Runtime.getRuntime(); try{ r.exec("/usr/sbin/iwconfig eth1 > dattt"); }catch(Exception ex) { System.out.print("ciao"); }
"durante i primi 5 miuti di pioggia nel bosco c'è ancora asciutto, poi quando smetterà di piovere nel bosco cadranno gocce per 5 minuti.....la natura ha un'ottima memoria..."
http://www.kumbe.it
Perchè quando hai a che fare con dei parametri (o meglio, un comando con degli spazi, che non siano il nome del file), devi usare il metodo exec() che accetta un array di String. Non so, però, se funziona con la redirezione dell'output, comunque puoi provare così:
codice:Runtime r=Runtime.getRuntime(); String [] comando = {"/usr/sbin/iwconfig", "eth1", ">", "dattt"}; try{ r.exec(comando); }catch(Exception ex) { System.out.print("ciao"); }
Ciao.
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza