今までパッケージ管理されていなかったデータオブジェクトをパッケージ管理するよう変更したのですが、クラス名が変更されたことにより旧データオブジェクトの復旧が行えなくなりました。
前データ)
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
クラス名が変わったので、当たり前の動きとは思うのですが、旧データを今までと同じようにインスタンス化するために何か良い方法はありませんでしょうか?
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
この状態だと、そのまま受け渡すのは難しそうですね。
おそらく、元のDataクラスを残してインスタンス生成し、それとは別に新しいDataインスタンスをnewして、個々の値をコピーしていくしかないように思えます。今からプログラムの修正がきくかどうかわかりませんが、今はObjectOutputStream/ObjectInputStreamは使わず、XMLEncoder/XMLDecoderのwriteObject/readObjectを使ってXMLファイルとしてオブジェクトを保存するのが一般的だろうと思います。これなら、いざとなれば直接XMLファイルを編集して内容を修正できますし。
面倒ですが、元のDataをXML出力の形に修正してインスタンスを書き出し、それから再びパッケージを設定する、ということは難しいでしょうか。
この回答への補足
私の認識だと、XMLEncoder/XMLDecoder は、Java1.5からだっと思うのですが、これはあっていますか?
現在利用しているJavaのJ2SDKはJava1.4.2なので、XMLEncoder/XMLDecoderの利用は断念した経緯があります。
(OSの関係でJava1.5にアップグレードできません)
Java1.4.2に対してXMLEncoder/XMLDecoder を利用できるように設定できれば、良いと思うのですが、拡張ライブラリとかあるのですかね?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Bluetooth・テザリング BluetoothのClassについて 2 2022/04/03 22:25
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- その他(プログラミング・Web制作) pythonでDBのカラム名で取得したオブジェクトの値を表示したい 1 2022/05/13 03:41
- モニター・ディスプレイ ゲ-ム画面がおかしくなった 2 2023/06/23 10:52
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- ルーター・ネットワーク機器 BluetoothのClassについて 2 2022/04/05 17:49
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Excel(エクセル) 格納したデータを配列のように扱う方法はありますか? 8 2023/06/05 08:53
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- PHP PHPSpreadsheetによる書き出し時のページネーション方法について 1 2023/03/20 10:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列にnullを代入すると、null...
-
マイクラでPythonのプログラミ...
-
変数名とDBカラム名の関係性に...
-
改行含むテキストの表示の仕方
-
プログラミングの問題です。大...
-
JAの支部?地域の農協のカード...
-
えハミルトン路と全域木のちが...
-
CSV出力を画面から選択したデー...
-
ショートカットキーについて
-
list の空は [] ってあわらすのに
-
あんまりお料理しないのに台所...
-
質問です。 配列が100以上の場...
-
次のhtml・cssでspan内の文字を...
-
Jupyter notebookですわかりま...
-
Eclipse 動的プロジェクトで404...
-
下記問題の答えが"D"になる意味...
-
JaneStyleのスレッドが見れなく...
-
キー入力について
-
jdk17.06のインストーラーが起...
-
リレーションエンティティクラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミングの問題です。大...
-
配列にnullを代入すると、null...
-
マイクラでPythonのプログラミ...
-
JAの支部?地域の農協のカード...
-
eclipse実行ができない
-
Eclipse 動的プロジェクトで404...
-
下記問題の答えが"D"になる意味...
-
正規表現について質問です。 カ...
-
list の空は [] ってあわらすのに
-
「main メソッドを持つクラスが...
-
あんまりお料理しないのに台所...
-
JaneStyleのスレッドが見れなく...
-
jdk17.06のインストーラーが起...
-
eclipseで作ったプログラムを他...
-
改行含むテキストの表示の仕方
-
キー入力について
-
CSV出力を画面から選択したデー...
-
Processingでマウスクリックで...
-
次のhtml・cssでspan内の文字を...
-
JSFタグのfタグとは
おすすめ情報