我知道有类似的线程,我已经全部阅读过了。然而,他们都没有任何帮助。
我有这个简单的批处理文件:
@echo off
set /p UserInput=Enter a number:
echo Number was %UserInput%
我想从java运行这个批处理文件,将数字发送给它并获取输入。
我有一个奇怪的问题。我使用cmd / c启动批处理文件,打开输入和输出流,但它仍然无法正常工作。当我运行程序时,例如“cmd.exe”,它会返回打开CMD窗口时获得的实际输出:
Microsoft Windows ...版权所有(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:
,没有别的,几乎就像输出流根本不工作一样。
答案 0 :(得分:0)
不要使用PrintWriter,而是尝试使用BufferedWriter包装的OutputStreamWriter:
printOut = new BufferedWriter(new OutputStreamWriter(out));
显然,您还需要将printOut
更改为BufferedWriter。
看起来你正在以错误的顺序冲洗和打印给我,我会这样做:
printOut.println("209");
printOut.flush();
作为一个侧面,您可以在BufferedReader上使用readLine()
而不仅仅是read()
!