Как запустить BufferedReader более одного раза в командной строке, чтобы ввести значение? - PullRequest
0 голосов
/ 03 июля 2018

Хотя я поставил правильную дату, если я куда-то положу и это будет ошибкой. Я хочу знать, как я могу написать несколько входов в командной строке. Например, я поставил "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 голосов
/ 04 июля 2018

Кажется, что когда команда пытается прочитать значение, она прочитает все доступные входные данные и обработает его как одно значение. Вы должны записать и очистить значения в нужное время, и в связи с этим, избегайте любой буферизации:

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();
}
0 голосов
/ 03 июля 2018

вы всегда можете сделать еще одну запись

writer.write("whatever");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...