如何使用bash将文件重定向为Java程序的输入?

我的代码大致如下所示:

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 ,永远不会进入第二行。

如何修改程序以告诉它让错误输入转到下一行?

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(new InputStreamReader(System.in))”谢谢大家!

您的代码实际上很好,它适用于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"); } 
  java -classpath ../src test.TestProgram