我想从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控制台中没有输出。
解决方案是什么?
答案 0 :(得分: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);