gpt4 book ai didi

java - 将对象保存到文件。添加/删除对象的自定义方法

转载 作者:行者123 更新时间:2023-12-02 07:07:10 24 4
gpt4 key购买 nike

我希望能够将程序中创建的对象保存到文件中。我看过一些关于 ObjectOutputStream 的教程,但问题是,它们只展示了如何保存在 main 方法中创建的特定对象。我想要的是,程序自动保存每个创建的对象。以我程序中的Group Object为例。这是添加方法:

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);
}

它是我的数据库类的一部分。我想自动将每个创建的组保存到文件中。这将如何完成?在数据库类中的哪里声明新文件?在主要方法中?

我的第二个问题是,如果我使用删除方法删除一个组:

public void removeGroup(int gid) {

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

}

如何从文件中删除它?我知道,我无法真正从文件中删除对象,但如何清空空间呢?

预先感谢您的所有帮助:)

最佳答案

如果您有权访问第 3 方库,只需使用 XStream 序列化为 XML。如果没有,您可以序列化并保存。

遵循 this: 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);
}

}

关于java - 将对象保存到文件。添加/删除对象的自定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15959507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com