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パス名にスラッシュが 2 つ含まれているため、エラーが返されているようです。それらをバックスラッシュに変更すると (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 に答える