这是一段简单的代码:

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 Read <!> lt; input.txt中

一旦input.txt被完全传送到程序中,x就会不断获得无限空值。为什么会这样?在将文件送入代码之后,有没有办法使标准输入(命令行)生效? 我试过关闭流并重新打开,它不起作用。重置等。

有帮助吗?

解决方案

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

如果你想这样做,那么将input.txt作为文件名参数传递给应用程序,从应用程序内部自己打开/读取/关闭文件,然后从标准输入读取以从命令行获取内容。

其他提示

嗯,这是在BufferedReader中阅读的典型情况。 readLine()在流结束时返回null。也许你的无限循环就是问题; - )

// try / catch ommitted

String x = null;

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

当行为空时,您需要终止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();
        }
    }
  

我有没有办法让标准输入(命令行)   将文件送入代码后激活?

很抱歉碰到一个老问题,但到目前为止,没有一个答案指出一种(仅限shell)方式在管道传输文件后传回控制台输入。

如果您运行命令

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

然后input.txt的文本将传递给java Read,然后您将被删回到控制台输入。

请注意,如果您按 Ctrl + D ,您将获得null s的无限循环,除非您修改程序以结束循环收到空。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top