Pregunta

Estoy tratando de eliminar archivos basura usando

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

Funciona bien siempre que no use comodines, es decir, esto funciona:

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

mientras que el siguiente devuelve "no hay dicho archivo o directorio":

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

Debería poder hacer todas las cosas bonitas como se describe aquí, ¿Correcto?

¿Fue útil?

Solución

¿Puedo sugerirle que dejes que Java haga esto por ti?

  • Use file.listfiles () para obtener la lista de archivos
  • Use file.getName (). Contiene (cadena) para filtrarlos si es necesario
  • iterar sobre la matriz realizando archivo.delete ()

Ventaja: portabilidad mejorada, ahorra el costo de un exec ()

Otros consejos

Después de mucha búsqueda encontré esto: http://www.coderanch.com/t/423573/java/java/passing-wilcard-runtime-execcommand

Runtime.exec(new String[] { "sh", "-c", "rm /tmp/ABC*" });

Esos son comodines de Bash. Se interpretan dentro del caparazón de la fiesta. Estás ejecutando RM directamente, por lo que no hay un caparazón para interpretar el * como 'todos los archivos'.

Podrías usar bash como comando. p.ej:

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

Runtime.getRuntime (). Exec (nueva cadena [] {"sh", "-c", "gunzip *.gz"});

  1. Use Exec (String [] {CMD, Arg1, Arg2 ...)

  2. Aquí hay un ejemplo completo para obtener el resultado como una cadena: Enlace.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top