java Runtime.getRunTime()。exec&wildcards?

我正试图通过使用删除垃圾文件

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

只要我不使用通配符,它​​工作正常,即这工作:

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

而以下会抛出“没有这样的文件或目录”:

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

我应该能够做到这里概述的所有好事,对吧?

我建议你让Java为你做这个吗?

  • 使用file.listFiles()获取文件列表
  • 如果需要,使用file.getName()。contains(string)过滤它们
  • 遍历执行file.delete()的数组

优点:提高了可移植性,节省了exec()的成本

经过大量的搜索,我发现了这个: http : //www.coderanch.com/t/423573/java/java/Passing-wilcard-Runtime-exec-command

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

那些是Bash通配符。 它们在Bash shell中解释。 您正在直接运行rm,因此没有shell将*解释为“所有文件”。

您可以使用bash作为命令。 例如:

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

Runtime.getRuntime()。exec(new String [] {“sh”,“ – c”,“gunzip * .gz”});

  1. 使用exec(String [] {cmd,arg1,arg2 …)

  2. 这是一个完整的示例,将结果作为String: Link 。