0

プログラムで作成したオブジェクトをファイルに保存できるようにしたいと考えています。ObjectOutputStream に関するいくつかのチュートリアルを見てきましたが、問題は、メイン メソッドで作成された特定のオブジェクトを保存する方法しか示していないことです。私が望むのは、プログラムが作成されたすべてのオブジェクトを自動的に保存することです。例として、私のプログラムのグループ オブジェクトを取り上げます。これは追加方法です:

public void addGroup(int gid, String groupname) {
    Group newgroup = new Group(gid, groupname);
    if (!Groups.contains(newgroup)) {
        Groups.add(newgroup);
        return;
    }else
        JOptionPane.showMessageDialog(null, "Group with ID " + gid
                + " already exists!", "Error",
                JOptionPane.WARNING_MESSAGE);
}

それは私のデータベースクラスの一部です。作成したすべてのグループを自動的にファイルに保存したい。これはどのように行われますか?データベースクラスのどこで新しいファイルを宣言しますか? メインメソッドで?

2 番目の質問は、remove メソッドを使用してグループを削除する場合です。

public void removeGroup(int gid) {

    if (!Groups.remove(new Group(gid, null))) {
        JOptionPane.showMessageDialog(null, "Group with ID[" + gid
                + "] not present. System unchanged.");
    }

}

ファイルから削除するにはどうすればよいですか? ファイルからオブジェクトを実際に削除することはできないことはわかっていますが、どうすればスペースを空にすることができますか?

すべての助けを前もってありがとう:)

4

2 に答える 2

2

サード パーティのライブラリにアクセスできる場合は、XStream を使用して XML にシリアル化します。そうでない場合は、シリアル化して保存できます。

次のようなシリアライゼーション チュートリアルに従ってください: http://www.tutorialspoint.com/java/java_serialization.htm

ファイルから何かを削除しようとする必要はないと思います..変更を加えたときに書き直してください。ファイルを読み込み、オブジェクトをシリアライズしてファイルに保存するメソッドをいくつか作成します。ここに例があります

Group.java

import java.io.Serializable;

public class Group implements Serializable
{
/**
 * 
 */
private static final long serialVersionUID = 1L;

private String guid;
private String groupName;

public Group(String guid, String groupName) {
    super();
    this.guid = guid;
    this.groupName = groupName;
}

public String getGuid() {
    return guid;
}
public void setGuid(String guid) {
    this.guid = guid;
}
public String getGroupName() {
    return groupName;
}
public void setGroupName(String groupName) {
    this.groupName = groupName;
}
}

GroupData.java

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

public class GroupData extends ArrayList<Group>
{
private static final long serialVersionUID = 1L;

public GroupData(){}

public void addGroup(Group group)
{
    this.add(group);
    saveGroupData();
}

public void removeGroup(Group group)
{
    this.remove(group);
    saveGroupData();
}

public void saveGroupData()
{
      try
      {
         FileOutputStream fileOut = new FileOutputStream("C:\\Users\\tester\\group-data.ser");
         ObjectOutputStream out = new ObjectOutputStream(fileOut);

         out.writeObject(this);

         out.close();
         fileOut.close();
      }
      catch(IOException i)
      {
          i.printStackTrace();
      }
}

public void loadGroupData()
{
      try
      {
         FileInputStream fileIn = new FileInputStream("C:\\Users\\tester\\group-data.ser");
         ObjectInputStream in = new ObjectInputStream(fileIn);
         GroupData tmp = (GroupData) in.readObject();

         this.clear();
         this.addAll(tmp);

         in.close();
         fileIn.close();
      }
      catch(IOException i)
      {
         i.printStackTrace();
         return;
      }
      catch(ClassNotFoundException c)
      {
         c.printStackTrace();
         return;
      }
}
}

ここにテストがあります

TestGroup.java

public class TestGroup {

/**
 * @param args
 */
public static void main(String[] args) 
{

    Group group1 = new Group("123", "testers");
    Group group2 = new Group("456", "programmers");
    Group group3 = new Group("687", "students");

    GroupData groupData = new GroupData();

    groupData.add(group1);
    groupData.add(group2);
    groupData.add(group3);

    groupData.remove(group3);
}

}
于 2013-04-11T21:58:30.270 に答える