0

「MyClass1」、「MyClass2」、「MyClass3」、「MyMainClass」というクラスがあります。

public class MyMainClass implements Serializable {
     private String att1, att2, att3;
     private int att4, att5, att6;
     private LinkedList <MyClass1> myClass1List = new LinkedList<MyClass1>();
     private LinkedList <MyClass2> myClass2List = new LinkedList<MyClass2>();
     private LinkedList <MyClass3> myClass3List = new LinkedList<MyClass3>();
}

私のプログラムは、「MyMainClass」のレジスタ (オブジェクト) を作成し、それを LinkedList に登録します。オブジェクトの LinkedList をファイルに保存して、プログラムを再度開いた後にそれらを取得したいと考えています。それを行う方法は何ですか?ObjectOutputStream を試してみましたが、うまくいきません。ありがとう。

編集:オブジェクトを追加するための私のコード(例を読んで試しただけです):

public static void addObject (MyMainClass p) {
    try {
        outputStream = new ObjectOutputStream(new FileOutputStream("myfile.dat"));
        outputStream.writeObject(p);
    } catch (FileNotFoundException ex) {
        ex.printStackTrace();
        System.exit(1);
    } catch (IOException ex) {
        ex.printStackTrace();
        System.exit(1);
    } finally {
        try {
            if (outputStream != null) {
                outputStream.flush();
                outputStream.close();
            }
        } catch (IOException ex) {
            ex.printStackTrace();
            System.exit(1);
        }
    }
}

注: 「MyClass1」、「MyClass2」、「MyClass3」はシリアライズ可能です。

4

3 に答える 3

1

私はずっと前に高校のプロジェクトで以下を使用しました。私の英語力が乏しいため、どのクラスを保存してロードするのか (LinkedList または myMainClass) をよく理解していませんが、このソリューションを使用してカスタム オブジェクトを正常に保存およびロードしました。便利だと思います。

使用法:

myMainClass object;
//
// ... your code fillin up the content of object
//
MyIO io = new MyIO();
io.save("", "myfile.dat", object); // "" as first argument will make java use current working directory

// to load the object:

myMainObject object = (myMainObject) io.load("", "myfile.dat"); 

ソース:

import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.IOException;

public class MyIO {

    // String path - path to the directory where the file is supposed to be saved.
    // String filename - the name of the file
    // Object data - object that you wish to save in the file. In your case "myMainClass"

    public void save(String path, String filename, Object data) {
        try {
            FileOutputStream fos = new FileOutputStream(path + filename, false);
            GZIPOutputStream gzos = new GZIPOutputStream(fos);
            ObjectOutputStream out = new ObjectOutputStream(gzos);
            out.writeObject(data);
            out.flush();
            out.close();
        } catch (IOException e) {
            System.out.println(e);
        }
    }

    // String path - path to the directory where the file is stored
    // String filename - the name of the file
    // The function returns java object which can be cast to myMainClass.

    public Object load(String path, String filename) {
        try {
            FileInputStream fis = new FileInputStream(path + filename);
            GZIPInputStream gzis = new GZIPInputStream(fis);
            ObjectInputStream in = new ObjectInputStream(gzis);
            Object data = in.readObject();
            in.close();
            return data;
        } catch (Exception e) {
            System.out.println(e);
        }
        return null;
    }
}
于 2013-04-08T16:38:32.673 に答える