Ввод данных из командной строки в Java - PullRequest
10 голосов
/ 16 сентября 2009

Вот простой фрагмент кода:

import java.io.*;
public class Read {
 public static void main(String[] args) {
     BufferedReader f = new BufferedReader(new InputStreamReader(System.in));
  while(true)
  {
   String x = null;
   try{
    x = f.readLine();
   }
   catch (IOException e) {e.printStackTrace();}
   System.out.println(x);
  }
 }
}

Я выполняю это как: java Read

Как только input.txt полностью передан в программу, x продолжает получать бесконечные нули. Почему это так? Есть ли способ, с помощью которого я могу сделать стандартный вход (командная строка) активным после того, как файл будет введен в код? Я пытался закрыть поток и снова открыть, это не работает. Сброс и т. Д. Также.

Ответы [ 4 ]

16 голосов
/ 16 сентября 2009

Выполнив "java Read < input.txt", вы сообщили операционной системе, что для этого процесса переданный файл является стандартным . После этого вы не сможете переключиться обратно в командную строку изнутри приложения.

Если вы хотите это сделать, то передайте input.txt в качестве параметра имени файла приложению, самостоятельно откройте / прочитайте / закройте файл изнутри приложения, затем прочитайте из стандартного ввода, чтобы получить данные из командной строки.

9 голосов
/ 16 сентября 2009

Ну, это типично для чтения в BufferedReader. readLine() возвращает null при достижении конца потока. Возможно, проблема в вашем бесконечном цикле; -)

// try / catch ommitted

String x = null;

while( (x = f.readLine()) != null )
{
   System.out.println(x);
}
6 голосов
/ 16 сентября 2009

Вам нужно завершить цикл while, когда строка пуста, например:

    BufferedReader in = null;
    try {
        in = new BufferedReader(new InputStreamReader(System.in));
        String line;
        while ((line = in.readLine()) != null) {
            System.out.println(line);
        }
    }
    catch (IOException e) {
        logger.error("IOException reading System.in", e);
        throw e;
    }
    finally {
        if (in != null) {
            in.close();
        }
    }
0 голосов
/ 02 декабря 2016

Есть ли способ, которым я могу сделать стандартный ввод (командная строка) активен после подачи файла в код?

Извините, что поднял старый вопрос, но пока ни один из ответов не указывает на то, что - это (только для оболочки) способ передачи обратно на консольный ввод после передачи в файл.

Если вы запустите команду

{ cat input.txt & cat; } | java Read

затем текст из input.txt будет передан в java Read, а затем вы вернетесь обратно на консольный ввод.

Обратите внимание, что если вы затем нажмете Ctrl + D , вы получите бесконечный цикл, равный null с, если только вы не измените свою программу, чтобы завершить цикл при получении нуля .

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