在java中保留对话框的数据

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序列化概念,但我并没有清楚地了解哪种技术适合以及如何使用这个问题。

考虑使用此处举例说明的java.util.Preferencesjavax.jnlp.PersistenceService引用的javax.jnlp.PersistenceService来保存TableModel数据。

这取决于您的应用程序。 最简单快捷的方法是对象序列化。 您可以将对象保存到文件中并再次加载。 您可以使用保存表数据的对象执行此操作。 有很多教程可供选择。

您可以通过首先将对象转换为人类可读的对象(如XML或JSON)并将其另存为文件来扩展序列化的概念。 这样做的好处是可以将导出的数据用于Java程序以外的其他内容。 用于编组XML的框架是JAXB。 还有很多教程。

最后,您可以使用SQL数据库。 数据库将是最高效的替代方案。 一个很好的框架,用于SQL in Hibernate中的持久化。 它主要用于需要快速数据存储后端的大型业务应用程序。 因为你必须为那个运行SQL服务器。 再次提供了很多教程。

我想对于你的情况,第一种选择将是最好的,因为它的快速和简单。 SQL会有点矫枉过正;-)

如果您无权访问数据库(本地或服务器),最好的方法可能是使用序列化。

考虑使用具体类来填充JTable 。 因此,要保存数据,您只需要使此类实现Serializable ,然后使用ObjectOutputStream将其写入文件。 然后在以后检索它时使用ObjectInputStream

我真的不记得JTable如何处理数据,但您可能必须创建一个自定义的Model类,它可以从AbstractTableModel ,并且将包含数组,无论是在数组中还是在List 。 但最好使用List因为它更易于使用且易于使用。 所以你可以直接序列化List,并在下次程序运行时检索。