使用java代码执行* nix find命令

时间:2013-02-16 01:50:36

标签: java linux

我正在尝试使用java代码执行find命令。我做了以下事情:

sysCommand = "find . -name '*out*' > file1"

Runtime runtimeObj = Runtime.getRuntime();

try {
    Process processObj = runtimeObj.exec(sysCommand);
    processObj.waitFor();
    ...

这个Linux命令在我使用命令行时执行但在Java中失败,为什么?

3 个答案:

答案 0 :(得分:1)

这个问题可能是duplicateduplicate

  • 无论如何,您可以使用File.list,在类型上提供过滤器 你想要的文件。您可以递归调用它来获取所有子目录。我不喜欢这个答案。你会认为有一种更简单的方法。

  • 我的一位朋友建议来自Apache的Commons-Exec来运行命令。它允许您在命令上使用超时。他推荐它,因为运行时可能存在大型stdout和stderr的问题。

答案 1 :(得分:1)

据我所知,Runtime.exec中不允许使用任何形式的管道操作员。如果要将结果移动到文件,则必须通过Process.getInputStream在Java中执行该部分。

答案 2 :(得分:1)

如果您有兴趣在Java中执行此操作,那么您将需要执行以下操作:

public void find(File startDirectory, FileFilter filter, List<File> matches) {
    File[] files = startDirectory.listFiles(filter);
    for (File file:files) {
        if(file.isDirectory()) {
            find(file, filter, matches);
        } else {
            matches.add(file);
        }
    }
}

然后你需要写FileFilter来接受与你的模式匹配的目录和文件。