2010-01-21 11 views
10

J'essaie de supprimer les fichiers indésirables en utilisantjava Runtime.getRunTime(). Exec & wildcards?

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

cela fonctionne très bien tant que je n'utilise des caractères génériques, à savoir cela fonctionne:

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

tandis que le suivant rejette « No such fichier ou répertoire ":

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

je devrais être en mesure de faire toutes les belles choses comme indiqué here, non?

Répondre

8

Puis-je suggérer que vous laissez Java faire pour vous?

  • Utilisez file.listFiles() pour obtenir la liste des fichiers
  • Utilisez file.getName(). Contient (string) pour les filtrer si nécessaire
  • itérer sur le tableau d'effectuer File.Delete()

Avantage: l'amélioration de la portabilité, permet d'économiser le coût d'un exec()

+0

oh mon ... cela fonctionne comme un charme! merci – Jakob

+2

Comment utilisez-vous les caractères génériques en général. Laissez le RM etc. Disons que j'ai mon propre binaire et je dois le lancer à partir d'un code Java. Comment feriez-vous cela? – harithski

8

Ce sont des caractères génériques Bash. Ils sont interprétés dans le shell Bash. Vous utilisez rm directement, donc il n'y a pas de shell pour interpréter le * comme 'tous les fichiers'.

Vous pouvez utiliser bash comme commande. .: par exemple

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

+2

ok je fais: Runtime.getRuntime(). Exec ("/ bin/bash -c \" rm * .foo \ ""); et je reçois: ERREUR> *. Foo ": -c: ligne 0: EOF inattendue lors de la recherche de correspondance" " ce que je ne comprends pas ... les évasions sont correctes ne sont-ils pas? – Jakob

+0

Je reçois la même erreur. – harithski

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

  2. Voici un exemple complet pour obtenir le résultat en tant que chaîne: Link.

2

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