• 締切済み

パッケージ管理に変更されたデータObjectのリカバリー方法

今までパッケージ管理されていなかったデータオブジェクトをパッケージ管理するよう変更したのですが、クラス名が変更されたことにより旧データオブジェクトの復旧が行えなくなりました。 前データ) class Data implements Serializable { public Data(){} } (1)オブジェクトストリームとしてExport。 Data target = new Data(); java.io.FileOutputStream ostream = new java.io.FileOutputStream("C:\\test.data"); java.io.ObjectOutputStream p = new java.io.ObjectOutputStream(ostream); p.writeObject(target); p.flush(); ostream.close(); (2)Dataオブジェクトをパッケージ管理に変更 新データ) package com.corp.etc class Data implements Serializable { public Data(){} } (3)(1)でExportしたデータをImport java.io.FileInputStream istream = new java.io.FileInputStream("C:\\test.data"); java.io.ObjectInputStream p = new java.io.ObjectInputStream(istream); Object obj = p.readObject(); istream.close(); Data data = (Data)obj; (3)の実行結果) java.lang.ClassNotFoundException: Data クラス名が変わったので、当たり前の動きとは思うのですが、旧データを今までと同じようにインスタンス化するために何か良い方法はありませんでしょうか?

みんなの回答

noname#49664
noname#49664
回答No.1

この状態だと、そのまま受け渡すのは難しそうですね。おそらく、元のDataクラスを残してインスタンス生成し、それとは別に新しいDataインスタンスをnewして、個々の値をコピーしていくしかないように思えます。 今からプログラムの修正がきくかどうかわかりませんが、今はObjectOutputStream/ObjectInputStreamは使わず、XMLEncoder/XMLDecoderのwriteObject/readObjectを使ってXMLファイルとしてオブジェクトを保存するのが一般的だろうと思います。これなら、いざとなれば直接XMLファイルを編集して内容を修正できますし。 面倒ですが、元のDataをXML出力の形に修正してインスタンスを書き出し、それから再びパッケージを設定する、ということは難しいでしょうか。

renann
質問者

補足

私の認識だと、XMLEncoder/XMLDecoder は、Java1.5からだっと思うのですが、これはあっていますか? 現在利用しているJavaのJ2SDKはJava1.4.2なので、XMLEncoder/XMLDecoderの利用は断念した経緯があります。 (OSの関係でJava1.5にアップグレードできません) Java1.4.2に対してXMLEncoder/XMLDecoder を利用できるように設定できれば、良いと思うのですが、拡張ライブラリとかあるのですかね?

すると、全ての回答が全文表示されます。

関連するQ&A