Reputation: 17
I want to be able to save the objects created in my program to a file. I have watched a few tutorials on ObjectOutputStream, but the problem is, they only show how to save a specific object created in the main method. What I want, I that the program automatically saves every created object. Taking the Group Object in my program as an example. This is the add method:
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);
}
It is part of my database class. I wan to automatically save every created group to the file. How would this be done? where do I declare the new file, in the database class? in the main method?
My second question is, if I delete a group, using the remove method:
public void removeGroup(int gid) {
if (!Groups.remove(new Group(gid, null))) {
JOptionPane.showMessageDialog(null, "Group with ID[" + gid
+ "] not present. System unchanged.");
}
}
How do I delete it from the file? I know, that I cant really delete an Object from the file, but how will I blank out the space?
Thanks in advance for all the help :)
Upvotes: 0
Views: 6061
Reputation: 1289
If you have access to 3rd party libraries, just use XStream to serialize to XML. If not, you can serialize and save.
Follow a serialization tutorial like this: http://www.tutorialspoint.com/java/java_serialization.htm
I don't think you want to try to remove anything from the file.. just rewrite it when you make a change. Make a couple methods to read in the file and also to serialize objects and save to file. Here is an example
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;
}
}
}
Here is a test
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);
}
}
Upvotes: 2
Reputation: 3573
This question can be answered in a number of ways. There are libraries out there for serialization like XStream that help you to serialize your objects. There area also libraries that will help you manage persistence (i.e. writing objects to file and being able to read them back into objects).
For something simple, you might just want to write a simple text file, or you might want that file to be binary.
Or you might just want to record the fact that objects were created and include some basic information about them from the objects themselves. For that, you want to look at one of the available log libraries, like slf4j, java.util.logging, or log4j
As far as deleting things from a file goes, you're essentially reading a file and replacing it without the part you want to erase. This page has some code that outlines a strategy for accomplishing that.
Upvotes: 0