3
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 序列化概念的信息,但我并不清楚哪种技术适合以及如何用于此问题。

4

3 回答 3

3

考虑TableModel使用,此处java.util.Preferences举例说明或,此处引用仅保存数据。javax.jnlp.PersistenceService

于 2012-11-09T13:40:15.143 回答
1

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

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

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

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

于 2012-11-09T11:17:27.047 回答
1

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

考虑使用具体类来填充您的JTable. 所以要保存数据,你只需要让这个类实现Serializable,然后使用ObjectOutputStream. 然后稍后使用ObjectInputStream.

我真的不记得如何处理数据,JTable但您可能必须创建一个自定义 Model 类,该类从. 但最好使用 a ,因为它更灵活且易于使用。因此,您可以直接序列化列表,并在程序下次运行时检索。AbstractTableModelListList

于 2012-11-09T11:18:37.887 回答