Javaでファイルを読み書きする方法に苦労しています。
ファイルに書き込まれる次のクラスがあります。
public class EconAppData implements Serializable {
private static final long serialVersionUID = 1432933606399916716L;
protected transient ArrayList<Favorite> favorites;
protected transient List<CatalogTitle> catalogLists;
protected transient int rangeMonthlySettings;
protected transient int rangeQuarterlySettings;
protected transient int rangeAnnualSettings;
EconAppData() {
favorites = new ArrayList<Favorite>();
catalogLists = new ArrayList<CatalogTitle>();
rangeMonthlySettings = 3;
rangeQuarterlySettings = 5;
rangeAnnualSettings = -1;
}
}
これは私の読み取り方法です:
protected Object readData(String filename) {
Object result;
FileInputStream fis;
ObjectInputStream ois;
try {
fis = openFileInput(filename);
ois = new ObjectInputStream(fis);
result = ois.readObject();
ois.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
System.err.println(filename + " not found");
return null;
} catch (StreamCorruptedException e) {
e.printStackTrace();
System.err.println(filename + " input stream corrupted");
return null;
} catch (IOException e) {
e.printStackTrace();
System.err.println("I/O error in reading " + filename);
return null;
} catch (ClassNotFoundException e) {
e.printStackTrace();
return null;
}
return result;
}
そして書き込み方法:
protected Object writeData(String filename, Object data) {
FileOutputStream fos;
ObjectOutputStream oos;
try {
fos = openFileOutput(filename, Context.MODE_PRIVATE);
oos = new ObjectOutputStream(fos);
oos.writeObject(data);
oos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
System.err.println(filename + " not found");
} catch (StreamCorruptedException e) {
e.printStackTrace();
System.err.println(filename + " output stream corrupted");
} catch (IOException e) {
e.printStackTrace();
System.err.println("I/O error in writing " + filename);
}
return null;
}
問題: コードをデバッグしているときに、ファイルが存在する限り、例外を発生させることなく、ファイルの読み取りと書き込みを行っているように見えます。データを読み取ると、EconAppData が null ではないことがわかりましたが、ArrayLists は null で、int は 0 です。これらの値を計算し、ファイルに書き込みます。次に、(デバッグ目的で) ファイルを再度読み取ると、計算したすべてのデータがなくなっていることがわかります。ここでも EconAppData は null ではありませんが、arraylists は null で、int はゼロです。
質問: オブジェクトも含むクラスをファイルに正しく読み書きするにはどうすればよいですか?
前もって感謝します。