什么是与System.in.read()一起使用的End of File / Stream键盘组合

时间:2014-05-19 16:08:00

标签: java eof console-input

道歉,如果这个琐碎的问题已经得到解答,我无法在SO上找到它。 使用此Java简单代码(Windows 7和Eclipse Kepler)从IDE控制台读取行:

int v;
try { while ((v = System.in.read()) != -1) System.out.println(v); }
catch (IOException e) { ; }

用户如何使值v等于-1? (我已经尝试 Ctrl + d - z - x - c - s - e 和其他没有可重复行为的键,但循环是随机中断的)

3 个答案:

答案 0 :(得分:10)

Control + D应该将EOF字符作为例外发送,但这是Eclipse中的错误。

其中一位用户报告为

    In Kepler 4.3 eclipse.buildId=4.3.0.M20130911-1000 on Linux the problem 
    still exists in the Java console. I found the following workaround:

    If you leave the console to focus on another view, and then refocus on the console,
    then Ctrl-D (EOF) works as expected.

关注here


在Windows中使用Eclipse时,Control + Z会发送EOF字符。

答案 1 :(得分:1)

在Windows命令提示符下使用Groovy对此进行测试,ctrl-D在ctrl-C执行时不起作用:

C:>groovy -e "while(v = System.in.read()){ println v }"
^D
4
13
10
-1
Terminate batch job (Y/N)? y

首先我点击ctrl-D然后输入,导致输出ctrl-D,4,13,10(最后三个是EOT,CR,LF,我猜,不知道^ D在这种情况下是多少)。 然后我尝试了ctrl-C并发送了'-1'输入结束。 所以看起来这依赖于Dev所说的shell。

答案 2 :(得分:0)

使用 control-D字符(按住控制键时键入D)指示程序从标准输入流中读取您已完成输入的输入。 control-D字符通常写为 ^ D