2016-01-21 38 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

谢谢你,伙计,似乎已经修复它。非常感谢。 :) –