0

オブジェクトをファイルに保存する最良の方法を教えてください。保存という意味では、オブジェクトを追加する必要があります。インターネットを検索したところ、printwriter はオブジェクトを toString メソッドの形式で保存することがわかりましたが、オブジェクトを toString 形式でファイルに保存すると、プログラマーはそれを使用してオブジェクトのインスタンスにアクセスできます。つまり、 printwriter(The object has a name, id and age) を使用して学生オブジェクトをテキスト ファイルに保存する場合、将来それを使用して、ある学生の年齢を別の学生の年齢/検索と比較する方法を教えてください。オブジェクトは文字列として保存されるため、文字列としてのみ読み取ることができるため、オブジェクトのインスタンスにアクセスするにはどうすればよいですか?

私が見つけた他の方法はシリアライゼーションです。シリアライゼーションは仕事をしているように見えますが、ストリームヘッダーがオーバーライドし続けるため、オブジェクトをファイルに追加できないことがわかりました。シリアル化を使用してファイルにオブジェクトを追加する方法はありますか?

現在、これらはオブジェクトを書き込むために私が見つけた2つの方法だけですが、 printwriter を使用して保存すると文字列として読み取られ、シリアル化を使用すると1つのレコードしか保存できないため、これらの方法のいずれも使用できないようです。

お時間をいただきありがとうございます。

4

4 に答える 4

2

問題の説明からわかるように、 JAXBはあなたにとって最適な選択です。ここでは、開始する簡単な例を示します。

JAXB は 1.6 以降の標準 JDK の一部であるため、追加のライブラリは必要ありません。コレクションのシリアル化もサポートしているため、「追加」タスクを簡単に実装できます。

于 2013-08-23T09:29:16.070 に答える
1

writeStreamHeaderをオーバーライドしてリセットするのはどうですか?

ObjectOutputStream ooStream = null;
try{
    ooStream = new ObjectOutputStream(new FileOutputStream("object-writer"));
    ooStream.writeObject(new ObjectWriter());
} catch(Exception ex){
    ex.printStackTrace();
} finally {
    if(ooStream != null){
        try {
            ooStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ObjectOutputStream ooStream2 = null;

try{
   ooStream2  = new ObjectOutputStream(new FileOutputStream("object-writer", true)) {
        @Override
        public void writeStreamHeader() throws IOException {
            reset();
        }
    };
    ooStream2.writeObject(new ObjectWriter());
} catch(Exception ex){
    ex.printStackTrace();
} finally {
    if(ooStream2 != null){
        try {
            ooStream2.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ObjectInputStream oiStream = null;
try {
    oiStream = new ObjectInputStream(new FileInputStream("object-writer"));
    System.out.println(oiStream.readObject());
    System.out.println(oiStream.readObject());
} catch (Exception e) {
    e.printStackTrace();
} finally {
    if(oiStream != null){
        try {
            oiStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
于 2013-08-23T09:51:36.957 に答える
1

PrintWriter の代わりに使用FileOutputStreamして、単純に追加モードでファイルにデータを書き込んでみませんか? FileOutputStream追加モードのコンストラクターがあります。

于 2013-08-23T09:43:36.243 に答える
1

(少なくとも私の意見では) 良いアイデアは、XStreamを使用してオブジェクト全体を XML としてファイルにシリアル化することです。そのライブラリを使用すると、オブジェクト全体をシリアル化して格納し、同じライブラリを使用して XML をオブジェクトに自動的に変換して比較できるようにすることができます。

また、ファイルを XML として保存すると、他の言語で同じファイルを処理できるようになります。

于 2013-08-23T09:29:11.067 に答える