Ввод трубопроводов с использованием Java с использованием командной строки - PullRequest
5 голосов
/ 07 мая 2011
public class ReadInput {
    public static void main(String[] args) throws IOException {
    BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
        String x = null;  
        while( (x = input.readLine()) != null ) {    
            System.out.println(x); 
        }    
    }
}  

Я могу запустить этот код из командной строки, набрав 'java ReadInput

Ответы [ 4 ]

6 голосов
/ 07 мая 2011

Аргументы, приведенные в командной строке программы, не идут в System.in, они идут в массиве args.Вы можете использовать что-то вроде echo hello | java ReadInput для запуска программы или изменить программу так, чтобы она смотрела на массив args и воспринимала его как ввод.(Если вы используете последний вариант, вы, вероятно, захотите вернуться к чтению с System.in, если в args ничего нет.)

3 голосов
/ 10 мая 2011

Оба предыдущих ответа частично верны, но частично вводят в заблуждение.

Использование следующего синтаксиса ...

java ReadInput < input.txt

... фактическая команда, которая выполняетсядвоичный файл Java:

java ReadInput

Оболочка операционной системы интерпретирует знак < и отправляет содержимое файла input.txt в стандартный поток ввода(System.in).

При вызове System.in.readLine() код проверяет, доступна ли строка ввода из стандартного потока ввода.Когда вы передаете файл по каналу, это означает, что он занимает следующую строку файла (как если бы ОС брала содержимое файла и вводила его по запросу).Когда вы запускаете программу без передачи файла, она будет ждать, пока вы, пользователь, не предоставите ей строку ввода из оболочки и не нажмете клавишу возврата.

Аргументы командной строки для JVM работают по-другомуи не используйте стандартный поток ввода (System.in).Пример:

java ReadInput "Input number one" "Input number two"

В этом случае вы передаете два аргумента командной строки.Эти свойства будут доступны через массив args:

   public static void main(String[] args) throws IOException {
          System.out.println(args.length); //3
          System.out.println(args[0]); //"ReadInput"
          System.out.println(args[1]); //"Input number one"
          System.out.println(args[2]); //"Input number two"
   }

С предоставленным вами кодом программа завершится, когда в результате вызова readLine () вернется nullполагаю Вы можете просто нажать клавишу ввода в приглашении, чтобы отправить пустую строку, и завершить программу.Если нет, вам, возможно, придется исправить программу, чтобы проверить наличие пустой строки (input.readLine (). Equals ("")).

Надеюсь, это поможет.

3 голосов
/ 07 мая 2011

Когда вы набираете java ReadInput hello, вы не (пока) не предоставили никакого ввода для System.in, поэтому выполнение программы блокируется до тех пор, пока не будет что прочитать. Вы можете заметить, что строка "hello" передается в параметр args в метод main().

Если вы используете отладчик (который я настоятельно рекомендую), поместите точку останова в первую строку main(). Вы заметите, что когда вы запустите свою программу как java ReadInput hello, args[0] будет "hello".

Если вы не используете отладчик, вы можете использовать System.out.println() (именно так начинающие часто отлаживают свой код). Добавьте эту строку кода в качестве первой строки main():

if (args.length > 0) System.out.println(args[0]);
1 голос
/ 22 января 2015

Завершите стандартный ввод с помощью

Ctrl-D  :  Linux/Unix 
Ctrl-Z (or F6) and "Enter" : Windows.

или установите special EOF symbol самостоятельно.

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