问题
i\'m trying to remove junk files by using
Process p = Runtime.getRuntime().exec();
it works fine as long as i do not use wildcards, i.e. this works:
Process p = Runtime.getRuntime().exec(\"/bin/rm -f specificJunkFile.java\");
while the following throws back \"No such file or directory\":
Process p = Runtime.getRuntime().exec(\"/bin/rm -f *.java\");
i should be able to do all the nice things as outlined here, right?
回答1:
Might I suggest that you let Java do this for you?
- Use file.listFiles() to get the list of files
- Use file.getName().contains(string) to filter them if needed
- iterate over the array performing file.delete()
Advantage: improved portability, saves the cost of an exec()
回答2:
After a lot of searching I found this: http://www.coderanch.com/t/423573/java/java/Passing-wilcard-Runtime-exec-command
Runtime.exec(new String[] { "sh", "-c", "rm /tmp/ABC*" });
回答3:
Those are Bash wildcards. They are interpreted within the Bash shell. You are running rm directly, so there is no shell to interpret the * as 'all files'.
You could use bash as the command. e.g.:
Runtime.getRuntime().exec("/path-to/bash -c \"rm *.foo\"")
回答4:
Runtime.getRuntime().exec(new String[] { "sh", "-c", "gunzip *.gz" });
回答5:
Use exec( String [] { cmd , arg1 , arg2...)
Here's a full example to get the result as a String : Link.
来源:https://stackoverflow.com/questions/2111983/java-runtime-getruntime-exec-wildcards