Вопрос

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

// try / catch ommitted

String x = null;

while( (x = f.readLine()) != null )
{
   System.out.println(x);
}

Вам нужно завершить цикл 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();
        }
    }
  

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top