Отправка команд внешнему процессу через STDIN с помощью JAVA

Мы пытаемся записать в STDIN команду, используя исполняемый файл Runtime в Java. Мы используем cmd /c для выполнения команды, так как Runtime exec не распознает ее без cmd /c. Это должно записать «q» и новую строку в файл с именем output.txt. Мы можем найти файл, но в нем нет содержимого.

String cmd = "cmd /c TYPE CON>output.txt";

try{
    process = Runtime.getRuntime().exec(cmd, null);
    BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
    bufferedWriter.write("q");
    bufferedWriter.newLine();
    bufferedWriter.flush();
    bufferedWriter.close();
}catch(Exception e){}

Мы также пытались использовать выходной поток напрямую и безуспешно записывать байты.

Это должна быть команда STDIN, мы неправильно понимаем process.getOutputStream()

Мы проверили, что эта же команда работает в командной строке.

Сейчас мы на Windows 10

Мы пробовали решения, предоставленные stackoverflow и другими сайтами, но безрезультатно.


person user2873958    schedule 28.11.2017    source источник
comment
Runtime.exec устарел и устарел. Вместо этого используйте ProcessBuilder. Кроме того, никогда не записывайте пустой блок catch. По крайней мере, поставьте туда e.printStackTrace();.   -  person VGR    schedule 28.11.2017
comment
Взгляните на этот ответ   -  person deFreitas    schedule 29.11.2017
comment
1) См. также Когда среда выполнения .exec() не будет из-за множества полезных советов по правильному созданию и управлению процессом. Затем игнорируйте ссылку на exec и используйте ProcessBuilder для создания процесса. Также разбейте String arg на String[] args, чтобы учесть такие вещи, как пути, содержащие пробелы. 2) Не игнорируйте исключения! Они сообщают нам, что именно пошло не так. Если ведение журнала не реализовано, по крайней мере вызовите Throwable.printStackTrace() 3) Мы попробовали решения, предоставленные с stackoverflow и других сайтов ..   -  person Andrew Thompson    schedule 29.11.2017
comment
Какие решения? Будьте конкретны! И SO, и «другие сайты» охватывают широкий спектр возможностей.   -  person Andrew Thompson    schedule 29.11.2017
comment
Хорошо, мы считаем, что это из-за команды cmd /c. STDIN, кажется, переходит к команде cmd /c и не перенаправляется в команду TYPE CON. Мы не нашли решения этой   -  person user2873958    schedule 05.12.2017