Java интерактивный ввод EOF - PullRequest
0 голосов
/ 10 мая 2011

Я пытаюсь реализовать пользовательский интерфейс ввода для настольной игры.Я пытаюсь получить пользовательский ввод по одному, а затем записать его в файл (так как мне нужно сохранить список шагов, сделанных пользователем).То, что у меня есть, работает хорошо (чтение ввода и запись его в файл), однако, когда пользователь хочет прекратить ввод, программа просто перестает работать.IE;когда вы нажимаете 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 раньше было время (input! = EOF);где всякий раз, когда пользователь вводит ctrl + d или ctrl + c, он останавливает все, что он делает, и затем переходит на следующую строку кода.Как я могу сделать это в Java?

Большое спасибо.

Ответы [ 3 ]

2 голосов
/ 10 мая 2011

Если вы сбрасываете после каждой записи, вы должны, по крайней мере, получить полный файл, когда пользователь нажимает на control-c.

Что касается обработки дополнительной информации после того, как произойдет control-c, вы можете сделать это, используякрюк отключения, такой как:

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

однако, я не знаю, что вы можете отменить завершение.

Я бы выбрал более нормальный ввод символов для действия «больше нет ввода».

1 голос
/ 10 мая 2011

Вы можете поймать сигнал Ctrl + C, используя SignalHandler .Хотя я бы не рекомендовал это, поскольку пользователю было бы сложно выйти из вашего приложения.Вместо этого вы можете остановить ввод, когда пользователь ничего не вводит, или использовать другой командный сигнал.

0 голосов
/ 10 мая 2011

Вы должны согласиться с командой, указывающей, что пользователь выполнил (например, «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(" ");
    }
...