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

如何使用bash将文件重定向为Java程序的输入?,java,bash,Java,Bash,我的代码大致如下所示: InputStreamReader isReader = new InputStreamReader(System.in); BufferedReader bufReader = new BufferedReader(isReader); while (true) { try { String inputStr = null; if ((inputStr=bufReader.readLine()) != null) {

我的代码大致如下所示:

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
它可以很好地处理文件中的第一行,但它会一直打印
输入为null
,并且从不转到第二行

我如何修改我的程序,告诉它让错误输入转到下一行

PS:我需要处理的文件如下:

111111
111111112
111111113
...
我试过了

java -classpath ../src test.TestProgram < filename
echo `cat filename` | java -classpath ../src test.TestProgram
java -classpath ../src test.TestProgram <<< `cat filename`
java-classpath../src test.TestProgramjava-classpath../src test.TestProgram java-classpath../src test.TestProgram
  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
您是如何制作输入文件的?也许你的行尾是非标准的

下面是您的代码,经过了一些清理:

  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");
  }

您的代码实际上很好,它在MacOSXJava1.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
您是如何制作输入文件的?也许你的行尾是非标准的

下面是您的代码,经过了一些清理:

  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");
  }

不是直接的答案,但是FYI readLine()在到达原始输入的结尾时返回null,因此一旦返回null,它将始终返回null。因为我仍然希望我的java项目接受命令行输入,我不希望将源从System.in更改为FileNull返回null表示已到达原始文件的结尾。你不能同时使用“in C++”,当遇到错误输入时,CIN会升起一个标志,当你做CIN。CULL()和CIN。IGRANE()时,CIN就准备好了后续输入。我们在Java中有类似的东西吗?我不知道“输入错误”是什么意思。每次对readline的调用都将返回所有字节,但不包括换行符/回车符。如果在创建读卡器时选择了字符集,找到的字节无法正确解析,则会出现异常。这不是直接答案,但一旦到达原始输入的末尾,FYI readLine()将返回null,因此,一旦它返回null,它将始终返回null。因为我仍然希望我的java项目接受命令行输入,我不想将源代码从System.in更改为file返回null意味着原始文件的结尾已经到达。你不能同时使用“in C++”,当遇到错误输入时,CIN会升起一个标志,当你做CIN。CULL()和CIN。IGRANE()时,CIN就准备好了后续输入。我们在Java中有类似的东西吗?我不知道“输入错误”是什么意思。每次对readline的调用都将返回所有字节,但不包括换行符/回车符。唯一一次出现异常的情况是,如果在创建读卡器时选择的字符集未正确解析找到的字节。我的错。。。我将“BufferedReader bufReader=new BufferedReader(new InputStreamReader(System.in))”放入循环中。。。塔克斯!我的错。。。我将“BufferedReader bufReader=new BufferedReader(new InputStreamReader(System.in))”放入循环中。。。塔克斯!