2017-10-17 7 views
0

現在、シリアル化を使用して 'Player'タイプのクラスのインスタンスを複数保存して読み込もうとしています。 (これはfyiとしての割り当て用です)。ObjectInputStreamを介してクラスのArraylistを保存してロードする

プロセスの現在の動作は、ObjectOutputStream.writeObject(Player)を介してクラスを実行することです。これは、クラスデータのように見えるテキストファイルを取得するときに機能するようです。

私が現在持っている問題は、クラスを逆読みして読み込んだときに、オブジェクトをプレーヤーオブジェクトにキャストすることができず、例外をスローしているということです。しかし、正確な例外を出してください。

下記の機能をご覧ください。

保存機能:

public void savePlayers(ArrayList<Player> p) 
{ 
    FileOutputStream fout = null; 
    ObjectOutputStream oos = null; 
    try 
    { 
     fout = new FileOutputStream("Player.txt"); 
     oos = new ObjectOutputStream(fout); 
     for(Player player: p) 
     { 
      oos.writeObject(p); 
     } 
     fout.close(); 
     oos.close(); 
     } 

    catch(Exception e) 
    { 
     System.out.println("Error is: " + e); 
    } 
    finally 
    { 
     closeStreams(fout, oos); 
    } 

} 

ロード機能:

public ArrayList<Player> loadPlayers() 
{ 

    ArrayList<Player> loadedList = new ArrayList<Player>(); 

    FileInputStream fis; 
    ObjectInputStream ois; 

    try 
    { 
     fis = new FileInputStream("Player.txt"); 
     ois = new ObjectInputStream(fis); 

     while(true) 
     { 
      System.out.println("Entered loop"); //testing 
      Object obj = ois.readObject(); 
      System.out.println("Read object done"); //testing 
      Player p = (Player)obj; 
      System.out.println("Casted player"); //The line here doesn't run, prints out error from exception instead and exits loop 
      loadedList.add(p); 
      System.out.println("Loop iterated"); 
     } 
    } 
    catch(EOFException eof) 
    { 

    } 
    catch(Exception e) 
    { 
      System.out.println("Exception here"); 
    } 
} 

は、クラスを保存するためのより良い方法はありますか?キャスト時に何か問題がありますか?

+0

は、なぜあなたは、実際のエラーメッセージを出力し、それが言うことは表示されません複数回全体のArrayListを書いていますか? – alfasin

+0

Playerはどのように定義されていますか?また、静かに例外を飲み込まないでください –

+0

おっと!先生はエラーがどこから来たのかを調べるためにタイプしましたが、私はそれを変更するのを忘れました。java.io.WriteAbortedException:書き込みが中止されました。 java.io.NotSerializableException:australianopen.GameController。 そのクラスを精査して何が起こっているのかを調べる – AidanJH

答えて

2

変更

oos.writeObject(player); 

と瞬間に、あなたは

+0

ありがとう!私は今例外やエラーを取得していない、うまくいけば、私はスパゲッティの残りの部分を修正し、最終的にいくつかのプレーヤーをロードすることができます! – AidanJH

関連する問題