подстановочный знак команды windows java processbuilder - PullRequest
2 голосов
/ 20 мая 2011

Я хочу вызвать команду Windows из Java.

Использование следующей строки прекрасно работает:

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 нет вывода.

Какое решение?

1 Ответ

3 голосов
/ 20 мая 2011

Похоже, 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);
...