下面是一个简单的代码:
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弟妹无限零点。 为什么会这样? 有没有办法让我可以使标准在(命令行)活动的文件被送入码后,做了什么? 我试着关闭流并重新打开,这是行不通的。 复位等也。
通过执行"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();
}
}
有没有办法让我可以使标准在(命令行)活动的文件被送入码后,做了什么?
对不起,撞一个老问题,但没有答案至今指出, 有一个(壳唯一的)传回一个文件管道后,控制台输入。
如果您运行的命令
{ cat input.txt & cat; } | java Read
然后从文本input.txt
会被传递给java Read
,然后你会跌回控制台输入。
请注意,如果你再按下Ctrl + d,你会得到的无限循环null
S,除非您修改程序时收到空结束循环。