在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.Preferences
或javax.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,并在下次程序运行时检索。