1

抽象オブジェクトの ArrayList をファイルに保存する方法を知りたいです。これまでのところ、プリミティブ型またはプリミティブ型の ArrayLists をカンマ区切りの文字列に変換し、これをバッファリングされたリーダーに保存するだけで保存できます。

しかし今、私は Game Elements の ArrayList を取得しました。これらは実際には異なるプロパティとコンストラクターを持っているため、私の通常のアプローチは機能しません。それぞれをファイルに保存したり、各タイプのオブジェクトをファイルに保存したり、多くの区切りレベルを追加したりするよりも優れた方法が必要です。

どうすればいい方法でこれを行うことができますか?

4

3 に答える 3

3

シリアル化を見てください。そこにはたくさんのチュートリアルがあるので、コードを投稿するつもりはありません。

http://www.tutorialspoint.com/java/java_serialization.htm

于 2012-09-25T10:49:21.710 に答える
1

抽象オブジェクトをインスタンス化できないため、それを拡張する子クラスが必要になります。また、抽象クラスも実装する必要がありますSerialize。次に、メソッドを使用しObjectOutputStreamて直接書き込むことができます。ArrayListwriteObject()

以下はサンプルアプリケーションです

public abstract class Parent implements Serializable {
    public abstract String getValue(); //Just to show value persist
}

public class Child extends Parent {
    String value = null;
    Child(String value) {
        this.value = value;
    }
    public String getValue() {
        return value;
    }
}
// No throws clause here
public static void main(String[] args) throws FileNotFoundException,
        IOException, ClassNotFoundException {
    //create Arraylist
    ArrayList<Parent> parents = new ArrayList<Parent>();
    parents.add(new Child("test"));
    //store
    ObjectOutputStream objectOutputStream = new ObjectOutputStream(
            new FileOutputStream("test.txt"));
    objectOutputStream.writeObject(parents);
    objectOutputStream.close();
    //Read back     
    ObjectInputStream objectInputStream = new ObjectInputStream(
            new FileInputStream("test.txt"));
    ArrayList<Parent> readObjects = (ArrayList<Parent>)objectInputStream.readObject();
    System.out.println(readObjects.get(0).getValue());
}
于 2012-09-25T10:57:00.130 に答える
0

答えは2つです。

後でファイルをどのように使用するかによって異なります。

ANS 1:オブジェクト値を一時的にファイルに保存し、ファイルから再度リロードする場合は、シリアル化が最適なオプションです。

ANS 2:ファイルがプログラムの出力である場合、以下のオプションを試してください#1:ファイル内の各行を一意のオブジェクト名OBJECT1、青、ピンク、黄色で開始します... OBJECT2、バラ、乳製品、ひまわり、cauliflower .. option#2フラットファイル(txt)の代わりに、apache poiフレームワークを使用して、より整理された方法でオブジェクトを書き込むことができます。

于 2012-09-27T20:36:24.263 に答える