2016-01-21 69 views
0

我並不確定問題出在哪裏,但代碼應該在每次調用saveCI方法時將ci變量寫入txt文件,覆蓋任何以前的int可能會或可能不會。當調用loadCI方法時,無論在txt文件中寫入的int值都需要保存到ci變量,並且如果txt文件完全爲空,則ci應該等於。出於某種原因,無論何時調用任何方法都不會發生,txt文件始終保持爲空。Java:使用掃描器和PrintWriter讀取和寫入int值到文件

下面的代碼:

private int ci; 
private File ciFile = new File("ci.txt"); 

private void saveCI(){ 
    try{ 
     PrintWriter pw = new PrintWriter(ciFile);   
     pw.write(ci); 
     pw.close(); 
     System.out.println("CI saved"); 
    }catch(FileNotFoundException e){ 
     System.out.println("CI save" + e); 
    } 
} 

public void loadCI(){ 
    try{ 
     Scanner sc = new Scanner(ciFile); 
     if(sc.hasNextInt() == false){ 
      ci = 0; 
     }else{ 
      ci = sc.nextInt(); 
     } 
     System.out.println("CI loaded"); 
    }catch(FileNotFoundException e){ 
     System.out.println("load ci " + e); 
    } 
} 

請記住,有從中取該樣本的類的詳細代碼,並有一個與還的代碼中很多其他類的保存和加載方法從其他方法/類中調用,我省略了其餘代碼,因爲這裏包含太多內容。我試圖練習面向對象方法。

+0

'如果(sc.hasNextInt()== FALSE){ CI = 0; } else { ci = sc.nextInt(); } ' 更簡單地寫成'ci = sc.hasNextInt()? sc.nextInt():0;' – FredK

+0

謝謝,我不知道:) –

回答

1

的問題是,的PrintWriterwrite(int c)方法解釋其作爲一個字符參數,所以零被寫入到該文件作爲無形NUL字符(數字值0),而不是所希望的「0」字符(數字值48 )。

調用pw.print(ci)而不是在saveCI()應該做的伎倆。

來源:https://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html

+0

謝謝你,夥計,似乎已經修復它。非常感謝。 :) –