Java Runtime.getRuntime (). Exec & Wildcards?
-
22-09-2019 - |
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?
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"});
Use Exec (String [] {CMD, Arg1, Arg2 ...)
Aquí hay un ejemplo completo para obtener el resultado como una cadena: Enlace.