Как перенаправить файл как вход в программу Java с помощью bash?

1

Мой код выглядит примерно так:

InputStreamReader isReader = new InputStreamReader(System.in);
BufferedReader bufReader = new BufferedReader(isReader);
while (true) {
    try {
        String inputStr = null;
        if ((inputStr=bufReader.readLine()) != null) {
            //DO SOMETHING
        }
        else {
            System.out.println("input is null");
        }
    }
    catch (Exception e) {
        //DO SOMETHING
    }
}

Когда я бегу

 java -classpath ../src test.TestProgram < filename

он обрабатывает первую строку в файле хорошо, но он сохраняет input is null печати input is null и никогда не переходит во вторую строку.

Как я могу изменить свою программу, чтобы сообщить ей, что входной сигнал ошибки будет идти и перейти к следующей строке?

PS: файл, который мне нужно прецессировать, выглядит следующим образом:

111111111
111111112
111111113
...

Я пытался

java -classpath ../src test.TestProgram < filename
echo 'cat filename' | java -classpath ../src test.TestProgram
java -classpath ../src test.TestProgram <<< 'cat filename'

и все они потерпели неудачу

Моя ошибка... Я положил "BufferedReader bufReader = new BufferedReader (новый InputStreamReader (System.in)") внутри цикла... Спасибо всем!

  • 1
    Не прямой ответ, но FYI readLine () возвращает ноль, как только достигнут конец исходного ввода, поэтому, как только он возвращает ноль, он всегда будет возвращать ноль.
  • 0
    Потому что я все еще хочу, чтобы мой проект Java принимал ввод из командной строки, я не хочу менять исходный код из System.in в файл
Показать ещё 5 комментариев
Теги:

2 ответа

0
Лучший ответ

Ваш код на самом деле прекрасен, и он работает для меня на Mac OSX Java 1.6.0. Я внес несколько незначительных изменений:

  public static void main(String[] args) {
    InputStreamReader isReader = new InputStreamReader(System.in);
    BufferedReader bufReader = new BufferedReader(isReader);
    while (true) {
      try {
        String inputStr = null;
        if ((inputStr = bufReader.readLine()) != null) {
          System.out.println(inputStr);
        } else {
          System.out.println("input is null");
          return; //end on first null
        }
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }

Я бегу:

java Test.java < data.txt

И он выводит:

111111111
111111112
111111113
input is null

Как вы сделали свой входной файл? Возможно, ваши окончания строк нестандартны?

Вот ваш код немного почистил:

  public static void main(String[] args) {
    BufferedReader bufReader = new BufferedReader(new InputStreamReader(System.in));
    String inputStr = null;
    try {
      while ((inputStr = bufReader.readLine()) != null) {
        System.out.println(inputStr);
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    System.out.println("end of file");
  }
  • 1
    Моя ошибка ... Я поместил "BufferedReader bufReader = new BufferedReader (new InputStreamReader (System.in))" внутри цикла ... Спасибо!
-4
java -classpath ../src test.TestProgram < cat filename

Ещё вопросы

Сообщество Overcoder
Наверх
Меню