Я знаю, что есть похожие темы, и я прочитал их все. Однако ни один из них не помог.
У меня есть этот простой командный файл:
@echo off
set /p UserInput=Enter a number:
echo Number was %UserInput%
Я хочу запустить этот пакетный файл из Java, отправить ему номер и получить ввод.
У меня странная проблема. Я запустил командный файл с помощью cmd / c, открыл потоки ввода и вывода, но он все равно не будет работать. Когда я запускаю программу, например «cmd.exe», она возвращает фактический вывод, который вы получаете при открытии окна CMD:
Microsoft Windows ... Copyright (c) 2009 Microsoft
Корпорация. Все права защищены.
Так что, по крайней мере, код частично работает. Однако это просто не дает мне никакого вывода, когда я использую "cmd /c C:\\test.bat"
(где test.bat является действительным командным файлом).
Это код Java. Что с ним не так?
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
public class Test {
private static BufferedReader bufIn;
private static BufferedWriter printOut;
private static Process p;
public static void main(String[] args) throws IOException {
Runtime rt = Runtime.getRuntime() ;
p = rt.exec("cmd.exe /c C:\\test.bat");
InputStream in = p.getInputStream() ;
OutputStream out = p.getOutputStream ();
bufIn = new BufferedReader(new InputStreamReader(in));
printOut = new BufferedWriter(new OutputStreamWriter(out));
int ch = 0;
ch = bufIn.read();
while (ch != 0)
{
System.out.print((char) ch);
ch = bufIn.read();
}
//send a command to
printOut.write("209");
printOut.flush();
while (ch != 0)
{
System.out.print((char) ch);
ch = bufIn.read();
}
//p.destroy() ;
}
}
Я должен получить:
Please enter a number:
Number was 209
Редактировать: я редактировал код, потому что он явно застревал в readLine, пока не было строки:)
Во всяком случае, у меня все еще есть проблема.
Я получаю:
Enter a number:
и ничего больше, почти как если бы выходной поток вообще не работал.