Java 如何在命令提示符下多次运行BufferedReader以输入值?

Java 如何在命令提示符下多次运行BufferedReader以输入值?,java,java-8,command-prompt,Java,Java 8,Command Prompt,虽然我写了一个正确的日期,但如果我把别的东西放在哪里,那就是一个错误。我想知道如何将多个输入写入命令提示符。 例如,我将“05-13-2018”作为writer.write()的变量。如果我想输入一个值,那么在代码下面是否有任何方法可以输入一个值,然后执行该值。如果你不明白我想要达到的目标,请给我留言。再次感谢你的帮助 import java.io.*; import java.util.ArrayList; public class command{ public static v

虽然我写了一个正确的日期,但如果我把别的东西放在哪里,那就是一个错误。我想知道如何将多个输入写入命令提示符。 例如,我将
“05-13-2018”
作为
writer.write()
的变量。如果我想输入一个值,那么在代码下面是否有任何方法可以输入一个值,然后执行该值。如果你不明白我想要达到的目标,请给我留言。再次感谢你的帮助

import java.io.*;
import java.util.ArrayList;


public class command{
    public static void main(String[] args) {


        String command="cmd /c date";

        try {
            Process process = Runtime.getRuntime().exec(command);
            OutputStreamWriter outputt = new OutputStreamWriter(process.getOutputStream());


            BufferedWriter writer = new BufferedWriter(outputt);
            writer.write("05-13-2018");
            writer.close();




            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }

            reader.close();


        } catch (IOException e) {
            e.printStackTrace();
        }



    }
}

你总是可以再写一篇

writer.write("whatever");

看起来,当命令尝试读取一个值时,它将读取所有可用的输入并将其视为一个值。必须在正确的时间写入和刷新值,因此,避免所有缓冲:

String command="cmd /c date";
try {
    Process process = Runtime.getRuntime().exec(command);
    try(Writer writer = new OutputStreamWriter(process.getOutputStream());
        Reader reader = new InputStreamReader(process.getInputStream())) {

        CharBuffer buf = CharBuffer.allocate(80);
        int tries = 3;
        while(process.isAlive()) {
            while(reader.ready() && reader.read(buf)>0) {
                System.out.append(buf.flip());
                buf.clear();
            }
            if(tries-- == 0) {
                process.destroy();
                break;
            }
            writer.write("05-13-2018");
            writer.flush();
            while(!reader.ready()) Thread.sleep(200);
        }
    }
} catch(IOException|InterruptedException e) {
    e.printStackTrace();
}

是否要通过命令行手动输入?@Eugene否,但我的最终目标是创建一个GUI界面,在该界面中,我将两个值从客户端传递到一个exe程序中的命令程序,该程序采用主机名和密码,并使用给定的信息进行一些计算。因此,最终,您要输入几个连续的输入,在
之前,系统无法接受输入的日期。
消息已消失,对吗?@Eugene Yeah close,但实际上我将运行一个命令,您在其中输入一个目录运行一个命令,并在命令提示符下提示您输入主机名,然后输入密码。这就是为什么我问是否有方法进行两个或多个输入。在写入值后,需要在
writer
上执行
newLine()
。在这里,它仍然有效,因为您在写入值后关闭了流,这迫使另一方接收它。但是,当然,这只能做一次。所以使用writer.write(value1);writer.newLine();writer.write(value2);writer.newLine()并仅在结尾处关闭。对于较小的值,您甚至不需要等待程序输出“enter…”消息,因为写入的数据将被缓冲。对于交互式输入,它无论如何都可以工作,因为用户将在输入值之前等待。