Ввод данных из командной строки в Java
-
07-07-2019 - |
Вопрос
Вот простой фрагмент кода:
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
с, если только вы не измените свою программу, чтобы завершить цикл, когда она получает ноль.