命令行管道输入Java中(Command Line Pipe Input in Java)

2019-07-18 04:59发布

下面是一个简单的代码:

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读<input.txt中

一旦input.txt中完全管道输入程序,X弟妹无限零点。 为什么会这样? 有没有办法让我可以使标准在(命令行)活动的文件被送入码后,做了什么? 我试着关闭流并重新打开,这是行不通的。 复位等也。

Answer 1:

通过执行"java Read < input.txt"你告诉操作系统,对于这个过程中,管道文件标准的,你不能再从里面的应用程序切换到命令行。

如果你想这样做,然后传递input.txt中作为文件名参数的应用程序,打开/读/从应用程序中关闭自己的文件,然后从标准输入读取到命令行得到的东西。



Answer 2:

好了,这是典型的在读BufferedReaderreadLine()返回null时流的末尾被击中。 也许你的无限循环的问题;-)

// try / catch ommitted

String x = null;

while( (x = f.readLine()) != null )
{
   System.out.println(x);
}


Answer 3:

您需要终止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();
        }
    }


Answer 4:

有没有办法让我可以使标准在(命令行)活动的文件被送入码后,做了什么?

对不起,撞一个老问题,但没有答案至今指出, 一个(壳唯一的)传回一个文件管道后,控制台输入。

如果您运行的命令

{ cat input.txt & cat; } | java Read

然后从文本input.txt会被传递给java Read ,然后你会跌回控制台输入。

请注意,如果你再按下Ctrl + d,你会得到的无限循环null S,除非您修改程序时收到空结束循环。



文章来源: Command Line Pipe Input in Java