何かを計算してその情報をhashTableに格納するプログラムを作成しています。私がやりたいのは、次に実行して、hashTableに格納されている以前の値を復元して再開することです。だから私はオブジェクトをファイルに保存する方法を尋ねますか?
私のコードでは、FileInputStreamとFileOutputStreamを使用しています。これまでのところ、私のコードの一部を次に示します。
@SuppressWarnings("unchecked")
private void obtainSaveFile(){
String file = new String("./saveFile.txt");
try{
//Create the file if it doesn't exist
if( !( (new File(file)).exists() ) ){
//Create new empty file
(new File(file)).createNewFile();
//Creates a fresh new hashTable
hashTable = new QuadraticProbingHashTable<TicTacToeBoard>();
}
else{
//Obtain the hashTables saved config.txt file
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
//Obtain the previously saved hashTable
//-----------------------------------
//This line of code gives me an error
//-----------------------------------
hashTable = (QuadraticProbingHashTable<TicTacToeBoard>)ois.readObject();
ois.close();
}
//Create save file configs.txt
FileOutputStream fos = new FileOutputStream(file);
saveFile = new ObjectOutputStream(fos);
}catch(Exception e){
e.printStackTrace();
//Creates a fresh new hashTable
//This line of code gives me an error
hashTable = new QuadraticProbingHashTable<TicTacToeBoard>();
}
}
最初は、ファイルがない場合は正常に実行されます。しかしその後、それは私にエラーを与え続けます。ファイルからオブジェクトを取得してQuadraticProbingHashTableとしてキャストし、それをhashTableと等しく設定するのは好きではありません。
また、エラーとして出力されるものは次のとおりです。
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: proj4.QuadraticProbingHashTable$HashEntry
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readArray(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at proj4.TicTacToeSolver.obtainSaveFile(TicTacToeSolver.java:308)
at proj4.TicTacToeSolver.solve(TicTacToeSolver.java:120)
at proj4.Main.main(Main.java:41)
Caused by: java.io.NotSerializableException: proj4.QuadraticProbingHashTable$HashEntry
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeArray(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at proj4.TicTacToeSolver.solve(TicTacToeSolver.java:246)
... 1 more
Exception in thread "main" java.lang.NullPointerException
at proj4.TicTacToeSolver.solve(TicTacToeSolver.java:246)
at proj4.Main.main(Main.java:41)