2010-01-21 13 views
10

próbuję usunąć niepotrzebne pliki za pomocąjava Runtime.getRunTime(). Exec & wildcards?

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

działa dobrze tak długo, jak nie używać symboli wieloznacznych, czyli to działa:

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

natomiast następujące rzuty z powrotem „Nie ma takiego plik lub katalog ":

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

i powinien być w stanie wykonać wszystkie miłe rzeczy jak przedstawiono here, prawda?

Odpowiedz

8

Czy mogę zasugerować, że pozwalasz Java zrobić to dla ciebie?

  • Zastosowanie file.listFiles(), aby uzyskać listę plików
  • Zastosowanie file.getName(). Zawiera (string), aby filtrować je w razie potrzeby
  • iteracyjne nad tablicy wykonywania file.delete()

Zaleta: ulepszona przenośność, oszczędza koszty funkcji exec()

+0

o mój ... to działa jak czar! dzięki – Jakob

+2

W jaki sposób korzystasz ogólnie z kart wieloznacznych. Zostaw rm itd. Powiedzmy, że mam swój własny plik binarny i muszę uruchomić go z kodu java. Jak byś to zrobił? – harithski

8

Są to wieloznaczne symbole Bash. Są interpretowane w powłoce Basha. Używasz rm bezpośrednio, więc nie ma powłoki interpretującej * jako "wszystkie pliki".

Możesz użyć basha jako polecenia. np .:

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

+2

ok, robię: Runtime.getRuntime(). Exec ("/ bin/bash -c \" rm * .foo \ ""); i otrzymuję: BŁĄD> *. Foo ": -c: linia 0: nieoczekiwany EOF podczas szukania dopasowania" "" tego nie rozumiem ... te wyjścia są poprawne, czyż nie? – Jakob

+0

Otrzymuję ten sam błąd. – harithski

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

  2. Oto pełna przykład, aby uzyskać wynik jako wyrażenie: Link.

2

Runtime.getRuntime(). Exec (nowy ciąg [] {"sh", "-c", "gunzip * .gz"});

Powiązane problemy