2010-01-21 5 views
10

Sto cercando di rimuovere i file spazzatura utilizzandojava Runtime.getRunTime(). Exec e caratteri jolly?

Process p = Runtime.getRuntime().exec(); 

funziona bene finché io non uso i caratteri jolly, vale a dire questo funziona:

Process p = Runtime.getRuntime().exec("/bin/rm -f specificJunkFile.java"); 

mentre il seguente getta indietro "No such file o la directory ":

Process p = Runtime.getRuntime().exec("/bin/rm -f *.java"); 

dovrei essere in grado di fare tutte le cose belle, come indicato here, giusto?

risposta

8

Potrei suggerire che si lascia Java fare questo per voi?

  • Usa file.listFiles() per ottenere l'elenco dei file
  • Usa file.getName(). Contiene (stringa) per filtrare loro se necessario
  • iterate sopra la matrice eseguendo File.Delete()

Vantaggio: una migliore portabilità, permette di risparmiare il costo di un exec()

+0

oh mio ... questo funziona come un incantesimo! grazie – Jakob

+2

Come usi le wild card in generale. Lascia il rm ecc. Diciamo che ho il mio binario e devo avviarlo da un codice java. Come lo faresti? – harithski

8

Questi sono caratteri jolly Bash. Sono interpretati all'interno della shell di Bash. Si sta eseguendo direttamente rm, quindi non c'è shell per interpretare * come "tutti i file".

È possibile utilizzare bash come comando. es .:

Runtime.getRuntime().exec("/path-to/bash -c \"rm *.foo\"")

+2

okay sto facendo: Runtime.getRuntime(). Exec ("/ bin/bash -c \" rm * .foo \ ""); e sto ottenendo: ERRORE> *. Foo ": -c: linea 0: EOF inaspettato mentre cerchi corrispondenza" "' questo non capisco ... le fughe sono corrette, vero? – Jakob

+0

Ricevo lo stesso errore. – harithski

0
  1. Usa exec (String [] {cmd, arg1, arg2 ...)

  2. Ecco un esempio completo per ottenere il risultato come una stringa: Link.

2

Runtime.getRuntime() exec (new String [] { "sh", "-c", "gunzip * .gz"}).;