if(e.getActionCommand().equals("save to file"))
{
System.out.println("save is pressed");
StringBuffer fileContent = new StringBuffer();
TableModel tModel = m_table.getModel();
for (int i = 1; i < tModel.getRowCount(); i++)
{
for(int j=0;j<tModel.getColumnCount();j++)
{
Object cellValue = tModel.getValueAt(i, j);
// ... continue to read each cell in a row
fileContent.append(cellValue);
// ... continue to append each cell value
fileContent.append(" ");
}
fileContent.append("\n");
}
FileWriter fileWriter;
try {
fileWriter = new FileWriter(new File("data.txt"));
fileWriter.write(fileContent.toString());
fileWriter.flush();
fileWriter.close();
}
catch (IOException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
我创建了一个JDialog
,其中有一个表格。我可以通过单击按钮将表数据保存到文件中,但我想要做的是将数据保存在表中,以便在下次运行程序时,该数据可用并显示在表中按下确认按钮时。虽然我读到了Java持久性和Java序列化概念,但我并不清楚哪种技术适合以及如何使用这个问题。
答案 0 :(得分:3)
答案 1 :(得分:1)
这取决于您的申请。最简单快捷的方法是对象序列化。您可以将对象保存到文件中并再次加载。您可以使用保存表数据的对象执行此操作。有很多教程可供选择。
您可以通过将对象转换为人类可读的对象(如XML或JSON)并将其另存为文件来扩展序列化的概念。这样做的好处是可以在Java程序以外的地方使用导出的数据。用于编组XML的框架是JAXB。还有很多教程。
最后,您可以使用SQL数据库。数据库将是最高效的替代方案。一个很好的框架,用于SQL in Hibernate中的持久化。它主要用于需要快速数据存储后端的大型业务应用程序。因为你必须为那个运行SQL服务器。还有很多教程可用。
我想对于你的情况,第一种选择将是最好的,因为它快速而简单。 SQL会有点矫枉过正; - )
答案 2 :(得分:1)
如果您无权访问数据库(本地或服务器),最好的方法可能是使用序列化。
考虑使用具体的类来填充JTable
。因此,要保存数据,您只需要使此类实现Serializable
,然后使用ObjectOutputStream
将其写入文件。然后在以后检索它时使用ObjectInputStream
。
我真的不记得JTable
如何使用数据,但您可能必须创建一个自定义的模型类,它可以从AbstractTableModel
开始,并且包含数据,无论是在数组中还是在数组中一个List
。但最好使用List
,因为它更易于使用且易于使用。因此,您可以直接序列化List,并在下次运行程序时检索。