2

我想从 Java 调用 Windows 命令。

使用以下行可以正常工作:

ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C",
      "find \"searchstr\" C://Workspace//inputFile.txt");

但我想在该位置下的所有文本文件中找到字符串,尝试过这种方式,

ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C",
      "find \"searchstr\" C://Workspace//*.txt");

但它不起作用,Java 控制台中没有输出。

解决方案是什么?

4

1 回答 1

3

由于路径名中的双正斜杠,看起来find返回错误。如果您将它们更改为反斜杠(在 Java 字符串中加倍以转义它们),那么它会成功。

find您可以使用类似于以下的代码检查错误输出和退出代码(成功时为 0,出错时为 1):

ProcessBuilder pb = new ProcessBuilder(
    "cmd.exe", 
    "/C",
    "find \"searchstr\" C://Workspace//inputFile.txt");

Process p = pb.start();
InputStream errorOutput = new BufferedInputStream(p.getErrorStream(), 10000);
InputStream consoleOutput = new BufferedInputStream(p.getInputStream(), 10000);

int exitCode = p.waitFor();

int ch;

System.out.println("Errors:");
while ((ch = errorOutput.read()) != -1) {
    System.out.print((char) ch);
}

System.out.println("Output:");
while ((ch = consoleOutput.read()) != -1) {
    System.out.print((char) ch);
}

System.out.println("Exit code: " + exitCode);
于 2011-05-20T12:52:55.257 回答