如何为独立 java 应用程序存储简单数据

How to store simple data for standalone java application

假设我有一长串具有一些基本特征的人:

马特,27 岁,男性

安妮,49 岁,女

等...

我想为不需要访问互联网的独立桌面应用程序在本地存储此数据。我当前的方法是将名称写入 json 文件,并在程序打开时将它们全部读入 java 中的 Person class;但是,我不认为这是有效的,因为只有在有人执行搜索时才需要访问数据。

所以我考虑了一个简单的 JSONparser,比方说 searchNameInFile("Matt", "data.json") { return person; },但我不知道这是否是存储效率数据的好方法。我很快就考虑了 sqlite,但我只存储了一个 table 数据,我认为这可能有点过头了。什么是存储和搜索本地数据的合适、有效的方法?

我真的认为你应该重新考虑 SQLite。

https://www.tutorialspoint.com/sqlite/sqlite_java.htm

您的数据将存储在本地文件中,可以使用标准 Java SQL 内容轻松查询。它不需要任何服务器软件或互联网连接。

如果您不想使用 SQLite,这里有两种可能的方法,具体取决于您关心的内容。

如果你只关心时间复杂度,但有足够的内存可以使用,你可以将数据存储在一个高效的结构中,例如 HashMap,并使用 Java 内置的 Serializable 来编写将 HashMap 输出到一个文件,并在下次启动时将其读回。

//Where Person is a data class that implements Serializable and contains your desired fields
public void saveData(HashMap<String, Person> people) {
    FileOutputStream f = new FileOutputStream(new File("people.txt"));
    ObjectOutputStream o = new ObjectOutputStream(f);
    o.writeObject(people);
    o.close();
    f.close();
}
public HashMap<String, Person> loadData() {
    FileInputStream fi = new FileInputStream(new File("people.txt"));
    ObjectInputStream oi = new ObjectInputStream(fi);
    HashMap<String, Person> data = (HashMap<String, Person>) oi.readObject();
    oi.close();
    fi.close();
    return data;
}

如果您不介意 O(n) 次搜索时间,那么您当前的每次搜索都重新读取文件的解决方案就可以了。

it might be overkill

重新发明轮子才是真正的矫枉过正。有很多用于存储和加载数据的库和方法。

既然您想将数据存储在本地文件中,又想在数据中进行搜索,那么嵌入式 SQL 数据库应该是您不错的选择。 SQLite、h2 或 HSQL.

为了访问数据,您可以使用从普通 JDBC 到 Spring Data JPA

的任何东西

你也可以考虑另一个Simple in-memory DB作为H2。它将数据保存在关系数据库中,该数据库作为文件存储在您的计算机中。优点是它具有高检索速度基准。 H2

优点是配置非常简单,只需创建数据库对象并将其配置为使用内存文件即可。