Java交互式输入EOF

时间:2011-05-10 00:36:05

标签: java input eof

我正在尝试为棋盘游戏实现用户输入界面。我试图一次获取一个用户输入,然后将其写入文件(因为我需要保存用户所做的移动列表)。我到目前为止,工作得很好(读取输入并将其写入文件),但是,每当用户想要停止输入时,程序就会停止工作。即;按ctrl + c,程序结束。

到目前为止,我已经在主函数

之外声明了fileName变量
public static void main(String[] args) throws IOException {
    BufferedReader inputReader = new BufferedReader (new InputStreamReader (System.in));
    try {
        FileWriter outFile = new FileWriter (fileName);
        PrintWriter out = new PrintWriter (outFile);
        System.out.print ("Enter move: ");
        String line = inputReader.readLine();
        while (line != null) {
            System.out.print ("Enter move: ");
            out.write(inputReader.readLine());
            out.write(" ");
            }
            out.close();
    } catch (IOException e) {
        System.out.println (e.getMessage());
    }

    System.out.println ("Reached here");
}

我想要做的是每当用户想要停止输入时,我想到达打印行,其中显示“已到达此处”。我想这样做,因为一旦在循环之外,我可以读取文件然后拆分输入并操纵它。我记得在用C编程时,曾经有过(输入!= EOF);每当用户输入ctrl + d或ctrl + c时,它会停止它正在做的任何事情,然后移动到下一行代码。 我怎么能在java中做到这一点?

非常感谢。

3 个答案:

答案 0 :(得分:2)

如果在每次写入后刷新,则在用户点击control-c时至少应该获得一个完整的文件。

对于在control-c发生后处理更多信息,您可以使用关闭钩子来执行此操作,例如:

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() { 
        // do something before quiting
    }
});

但是,我不知道你可以取消终止。

我会为“不再输入”操作选择更正常的字符输入。

答案 1 :(得分:1)

您可以使用SignalHandler捕获Ctrl + C信号。虽然我不建议这样做,因为这会让用户很难退出你的应用程序。相反,当用户不输入任何内容或使用不同的命令信号时,您可以停止输入。

答案 2 :(得分:0)

您需要同意指示用户已完成的命令(例如“EOF”)并在while循环中添加以下内容:

    while (line != null) {
        System.out.print ("Enter move: ");
        String r = inputReader.readLine();
        if ( r != null ) {
           if ( "EOF".equals(r) ) break;
        }
        out.write();
        out.write(" ");
    }