2011-05-20 63 views
2

我想从Java调用Windows命令。java processbuilder 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

是否'找到“字符串searchstr “C:// Workspace // * .txt”是否在Windows命令提示符下工作?如果路径不存在,它会在第一种情况下给我一个'文件未找到'消息,但通配符挂起。 – 2011-05-20 08:59:56

+0

嗨垫, 它工作正常,如果我直接粘贴到命令提示符并运行它。 – 2011-05-20 09:05:23

+0

嗯, 这可以在命令行中使用, C:\ Workspace> find“searchstr”C://Workspace//*.txt – 2011-05-20 09:19:32

回答

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);