这是一段简单的代码:
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< input.txt中
一旦input.txt被完全传送到程序中,x就会不断获得无限空值。为什么会这样?在将文件送入代码后,我是否可以使标准输入(命令行)处于活动状态? 我试过关闭流并重新打开,它不起作用。重置等。
答案 0 :(得分:16)
通过执行"java Read < input.txt"
,您告诉操作系统,对于此过程,管道文件是标准输入。您无法从内部切换回命令行应用
如果你想这样做,那么将input.txt作为文件名参数传递给应用程序,从应用程序内部自己打开/读取/关闭文件,然后从标准输入读取以从命令行获取内容。
答案 1 :(得分:9)
嗯,这是在BufferedReader
中阅读的典型情况。点击流末尾时readLine()
会返回null
。也许你的无限循环就是问题; - )
// try / catch ommitted
String x = null;
while( (x = f.readLine()) != null )
{
System.out.println(x);
}
答案 2 :(得分:6)
当行为空时,您需要终止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();
}
}
答案 3 :(得分:0)
我有没有办法让标准输入(命令行) 将文件送入代码后激活?
很抱歉碰到一个老问题,但到目前为止,没有一个答案指出是一种(仅限shell)方式在管道传输文件后传回控制台输入。
如果您运行命令
{ cat input.txt & cat; } | java Read
然后来自input.txt
的文本将传递给java Read
,然后您将被退回到控制台输入。
请注意,如果您按 Ctrl + D ,您将获得null
s的无限循环,除非您修改程序以结束循环当它收到null时。