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

时间:2018-07-03 20:08:36

标签: java java-8 command-prompt

尽管我输入了正确的日期,但如果我在其他地方输入了日期,则会出现错误。我想知道如何将多个输入写入命令提示符。 例如,我将"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();
        }



    }
}

2 个答案:

答案 0 :(得分:0)

您总是可以再写一次

writer.write("whatever");

答案 1 :(得分:0)

似乎该命令尝试读取一个值时,它将读取所有可用输入并将其视为一个值。您必须在正确的时间编写和刷新值,并在这方面避免所有缓冲:

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();
}