使用命令行使用Java管道输入

时间:2011-05-07 01:16:12

标签: java input piping

public class ReadInput {
    public static void main(String[] args) throws IOException {
    BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
        String x = null;  
        while( (x = input.readLine()) != null ) {    
            System.out.println(x); 
        }    
    }
}  

我可以通过输入'java ReadInput<来从命令行运行此代码input.txt'但不是直接输入输入,如'java ReadInput hello'。当我输入'java ReadInput hello'时,由于某种原因,我似乎陷入无限循环。它不应该像键入'java ReadInput<一样工作。 input.txt'但只是重印'hello'?

4 个答案:

答案 0 :(得分:6)

程序命令行上给出的参数不会转到System.in,它们会进入args数组。您可以使用echo hello | java ReadInput之类的东西来运行程序,或者您可以修改程序以查看其args数组并将其视为输入。 (如果您使用后一种选项,如果System.in中没有任何内容,您可能希望退回到args的阅读。)

答案 1 :(得分:3)

当你输入java ReadInput hello时,你还没有({)向System.in提供任何输入,所以程序执行会阻塞,直到有东西要读。您可能会注意到字符串"hello"已传递到args方法的main()参数。

如果您正在使用调试器(我强烈推荐),请在main()的第一行放置一个断点。当您将java ReadInput hello args[0] "hello" System.out.println()作为main()运行时,您会注意到。

如果您没有使用调试器,则可以使用if (args.length > 0) System.out.println(args[0]); (这是初学者经常调试代码的方式)。将此行代码添加为{{1}}的第一行:

{{1}}

答案 2 :(得分:3)

上述其他两个答案都是部分正确的,但有部分误导。

使用以下语法...

java ReadInput < input.txt

...在java二进制文件上运行的实际命令是:

java ReadInput

操作系统shell 解释<符号,并将input.txt的内容发送到标准输入流(System.in)。

当您致电System.in.readLine()时,代码会检查标准输入流中是否有可用的输入线。当您在文件中传送时,这意味着它需要文件的下一行(就好像操作系统正在获取文件的内容并在提示符下键入它们)。当你运行程序而不管道文件时,它将等到你(用户)从shell提供一行输入并按回车键。

JVM的命令行参数的工作方式不同,不使用标准输入流(System.in)。例如:

java ReadInput "Input number one" "Input number two"

在这种情况下,您传递两个命令行参数。这些属性将通过args数组提供:

   public static void main(String[] args) throws IOException {
          System.out.println(args.length); //3
          System.out.println(args[0]); //"ReadInput"
          System.out.println(args[1]); //"Input number one"
          System.out.println(args[2]); //"Input number two"
   }

使用您提供的代码,当readLine()调用的结果返回null时,程序将结束。我相信您可以在提示符处按Enter键发送空行,然后结束程序。如果没有,您可能必须修复程序以检查空字符串(input.readLine()。equals(“”))。

希望这有帮助。

答案 3 :(得分:1)

使用

终止标准输入
Ctrl-D  :  Linux/Unix 
Ctrl-Z (or F6) and "Enter" : Windows.

或者自己设置 special EOF symbol