2011-05-10 96 views
0

我正試圖實現棋盤遊戲的用戶輸入界面。我試圖一次獲得一個用戶輸入,然後將其寫入一個文件(因爲我需要保存用戶所做的動作列表)。到目前爲止,我的工作很好(讀取輸入並將其寫入文件),但是,只要用戶想要停止輸入,程序就會停止工作。即;當你按下ctrl + c時,程序就結束了。Java交互式輸入EOF

這是我到目前爲止,文件名可變已申報的主要功能

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語言編程時,曾經有while(input!= EOF);每當用戶輸入ctrl + d或ctrl + c時,它會停止它正在做的事情,然後移動到下一行代碼中。 我如何在java中做到這一點?

非常感謝。

+1

Control-C將終止您的應用程序 – Dimitar 2011-05-10 00:46:09

回答

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(" "); 
    } 
+0

Thankyou非常,它的作品。 – Triple777er 2011-05-10 00:54:36

2

如果你在每次寫入後刷新,當用戶點擊control-c時,至少應該得到一個完整的文件。

至於處理後控制-C發生的更多信息,你可以通過使用一個關閉掛鉤,例如:

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

,我不知道,你可以取消終止。

我會爲'沒有更多輸入'動作選擇一個更正常的字符輸入。

+0

謝謝,我會給這個去,只是爲了體驗:D – Triple777er 2011-05-10 01:25:29

1

您可以使用SignalHandler趕按Ctrl + C信號。雖然我不會推薦這個,因爲它會讓用戶很難退出你的應用程序。相反,當用戶不輸入任何內容或使用不同的命令信號時,您可以停止輸入。

+0

謝謝,我已將接口更改爲輸入命令以停止輸入。 – Triple777er 2011-05-10 01:25:01