Java 中的命令行管道输入

2022-09-04 05:50:36

下面是一段简单的代码:

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读取<输入.txt

一旦输入.txt完全通过管道传输到程序中,x就会不断获得无限的空值。为什么会这样?有没有办法在输入到代码中的文件完成后使标准 In(命令行)处于活动状态?我尝试过关闭流并重新打开,但它不起作用。重置等。


答案 1

通过执行,您已经告诉操作系统,对于此过程,管道文件标准文件。然后,您无法从应用程序内部切换回命令行。"java Read < input.txt"

如果要执行此操作,请将 input.txt 作为文件名参数传递给应用程序,从应用程序内部自行打开/读取/关闭文件,然后从标准输入中读取以从命令行获取内容。


答案 2

好吧,这是典型的阅读. 在到达流结束时返回。也许你的无限循环是问题所在;-)BufferedReaderreadLine()null

// try / catch ommitted

String x = null;

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