0

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

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

Runtime runtimeObj = Runtime.getRuntime();

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

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

4

3 回答 3

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以接受与您的模式匹配的目录和文件。

于 2013-02-16T02:13:11.737 回答
1

这个问题可能是重复的或重复的。

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

  • 我的一个朋友推荐了 Apache 的Commons-Exec来运行命令。它允许您在命令上使用超时。他推荐它是因为运行时可能会遇到大型标准输出和标准错误的问题。

于 2013-02-16T01:56:32.297 回答
1

据我所知,不允许在Runtime.exec. 如果要将结果移动到文件中,则必须在 Java 中通过Process.getInputStream.

于 2013-02-16T02:01:59.797 回答