Связь с пакетным файлом Windows (или внешней программой) из Java - PullRequest
0 голосов
/ 07 августа 2011

Я знаю, что есть похожие темы, и я прочитал их все. Однако ни один из них не помог.

У меня есть этот простой командный файл:

@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: 

и ничего больше, почти как если бы выходной поток вообще не работал.

1 Ответ

0 голосов
/ 07 августа 2011

Вместо использования PrintWriter, попробуйте OutputStreamWriter, обернутый в BufferedWriter:

printOut = new BufferedWriter(new OutputStreamWriter(out));

Очевидно, вам также нужно изменить printOut на BufferedWriter.

Похоже, что вы меняете и печатаете не в том порядке, я бы сделал:

printOut.println("209");
printOut.flush();

В качестве дополнительной точки вы можете использовать readLine() в BufferedReader, а не просто read()!

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