2013-11-14 34 views
2
終端

我寫一個小一點的.jar申請,要求用戶輸入一個字符串,並將其寫入到一個.txt文件的程序。當輸入字符串不是exit時,我對該程序感興趣,繼續執行以下指令(即寫入日期字符串,並將輸入字符串寫入文本文件)。我的代碼不起作用,請不要記錄我輸入的第一行,也不要輸入我輸入的第一行exit。我嘗試了一些東西,嘗試一個do-while循環,但沒有奏效。我想知道問題是什麼?使用輸入字符串「退出」,退出在

try{ 
      String input = scanner(); 
      while(!input.equals("exit")){ 
       String fileLocation = "/Users/loop/Dropbox/goodTrance.txt"; 
       FileWriter writer = new FileWriter(fileLocation,true); 

       writer.append(returnDate()+": "); 
       writer.append(input + "\n"); 

       writer.flush(); 
       writer.close(); 
       input = scanner(); 
      } 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 

編輯:scanner()是返回一個字符串掃描儀的靜態方法。 returnDate()返回今天的日期。

public static String returnDate(){ 
     DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd"); 
     Date date = new Date(); 
     return dateFormat.format(date).toString(); 
    } 

public static String scanner(){ 
     Scanner input = new Scanner(System.in); 
     String writeSomething = input.nextLine(); 
     return writeSomething; 
    } 
+0

請顯示你的'scanner()'方法。 – rgettman

+0

什麼是掃描儀? [SSCCE](http://sscce.org)會有所幫助。 – crownjewel82

回答

2

scanner()的呼叫有什麼作用?看起來你每次循環都會調用兩次,並且可能會放棄第一次調用(但是檢查它)並存儲第二次調用而不檢查它。你應該把它叫做,每個循環一次

注意,你的代碼有其他問題:

  • 沒有必要爲scanner()方法。
  • 有沒有必要繼續重新創建一個掃描儀對象,事實上,這樣做,而不是釋放資源,你會面臨資源耗盡的風險。
  • 取而代之的是創建一個掃描儀對象一次,並在你的try塊中使用它,根據需要調用nextLine()
  • 還可以考慮在while循環之後關閉文件*,實際上在try塊的finally塊中。在那裏關閉掃描儀對象
  • 通過equalsIgnoreCase(...)檢查字符串通常是一個更好的主意。
  • 它的安全檢查,如下所示:

String line = null; 
while ("exit".equalsIgnoreCase(line)) { 
    line = scanner.nextLine(); 
    // etc... 

爲了避免NPE

+0

哦!好點子! – theGreenCabbage

+0

感謝氣墊船。非常業餘的錯誤,我做了。我宣佈了兩次 - 難怪。 – theGreenCabbage

+0

我在while循環之外聲明瞭'String input = scanner();'在for循環結束之前聲明瞭'input = scanner();'謝謝! – theGreenCabbage

0

你有沒有被髮送文本終端連接?如果是這種情況,終端協議逐個字符地發送,這意味着您不會將scanner()。equals(「exit」)變爲true,因爲它只需要一個字符而不是整個字符串。