13

我正在尝试使用删除垃圾文件

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

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

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

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

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

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

4

5 回答 5

15

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

Runtime.exec(new String[] { "sh", "-c", "rm /tmp/ABC*" });
于 2011-11-29T07:00:41.607 回答
9

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

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

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

于 2010-01-21T19:01:23.230 回答
8

我可以建议你让 Java 为你做这件事吗?

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

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

于 2010-01-21T19:45:08.207 回答
2

Runtime.getRuntime().exec(new String[] { "sh", "-c", "gunzip *.gz" });

于 2014-12-03T07:29:47.720 回答
0
  1. 使用 exec( String [] { cmd , arg1 , arg2...)

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

于 2013-06-01T09:12:30.637 回答