【问题标题】:java processbuilder windows command wildcardjava processbuilder windows命令通配符
【发布时间】:2011-05-20 08:25:20
【问题描述】:

我想从 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控制台中没有输出。

解决办法是什么?

【问题讨论】:

  • find "searchstr" C://Workspace//*.txt 在 Windows 命令提示符下工作吗?如果路径不存在,它会在第一种情况下给我一个“找不到文件”消息,但它会挂起通配符。
  • 嗨垫,如果我直接将其粘贴到命令提示符并运行它,它工作正常。
  • 好吧,这在命令行中有效,C:\Workspace>find "searchstr" C://Workspace//*.txt

标签: java windows wildcard runtime.exec processbuilder


【解决方案1】:

看起来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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多