我想从Java调用Windows命令。
使用下面的行工作正常:
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "find \"searchstr\" C://Workspace//inputFile.txt");
但是我想find该位置下的所有文本文件中的string,
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "find \"searchstr\" C://Workspace//*.txt");
但是它不起作用,Java控制台中没有输出。
有什么解决scheme?
它看起来像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);