在java中不使用数据库而保留项目的历史记录

在java中不使用数据库而保留项目的历史记录,java,file-io,object-persistence,Java,File Io,Object Persistence,我有一个小型java实用程序,它在远程计算机上执行任务。此应用程序将为用户提供一个下拉/组合框,用户可以在其中输入要连接的计算机的ip地址或主机名。如果用户可以在下拉列表中拥有他们连接的项目/主机的历史记录,那就太好了 我认为我可以在可分发jar中创建一个文件,并使用它来维护历史记录。但是写入jar中的文件似乎是不可能的?另一种方法是使用jar外部的文本文件、数据库等。但这并不完全是我想做的,因为我的实用程序应用程序只有一个文件,我希望它完全独立于任何外部文件。此外,让文本文件粘在jar文件周围

我有一个小型java实用程序,它在远程计算机上执行任务。此应用程序将为用户提供一个下拉/组合框,用户可以在其中输入要连接的计算机的ip地址或主机名。如果用户可以在下拉列表中拥有他们连接的项目/主机的历史记录,那就太好了

我认为我可以在可分发jar中创建一个文件,并使用它来维护历史记录。但是写入jar中的文件似乎是不可能的?另一种方法是使用jar外部的文本文件、数据库等。但这并不完全是我想做的,因为我的实用程序应用程序只有一个文件,我希望它完全独立于任何外部文件。此外,让文本文件粘在jar文件周围或每次运行应用程序时创建文本文件也不好


考虑到这种情况,我可以使用哪些选项?是否有任何API可以帮助存储或保留历史记录?

为什么不将此信息与隐藏文件一起存储在用户主目录中?许多应用程序都做同样的事情

您可以通过这种方式获取用户主目录

String userhome = System.getProperty("user.home");

为什么不将此信息与隐藏文件一起存储在用户主目录中?许多应用程序都做同样的事情

您可以通过这种方式获取用户主目录

String userhome = System.getProperty("user.home");

我建议将一些
.dat
文件保存在与JAR相关联的地方。可以位于同一目录中,也可以位于用户的家中(如@dash1e建议的),以避免任何权限问题。我想你会发现这是最简单的解决办法

另一种选择是使用基于Java的数据库解决方案,该解决方案可以捆绑到您的JAR中(参见,等)。请注意,这将在某处创建文件,但您不必担心文件级管理,因为您只需将其作为数据库进行交互


如果您确实坚持不必维护自己的文件,那么最后一个选择是使用,它提供了一种与操作系统无关的方式,将数据存储在系统中某个模糊的位置。这可能有点误用了这个API的目标,但可以满足您的要求。

我建议将一些
.dat
文件保存在与JAR相关的地方。可以位于同一目录中,也可以位于用户的家中(如@dash1e建议的),以避免任何权限问题。我想你会发现这是最简单的解决办法

另一种选择是使用基于Java的数据库解决方案,该解决方案可以捆绑到您的JAR中(参见,等)。请注意,这将在某处创建文件,但您不必担心文件级管理,因为您只需将其作为数据库进行交互


如果您确实坚持不必维护自己的文件,那么最后一个选择是使用,它提供了一种与操作系统无关的方式,将数据存储在系统中某个模糊的位置。这可能有点误用了此API的目标,但可以满足您的要求。

此方法是否独立于平台?例如,我如何在不同的操作系统上隐藏文件?是的,在*nix、Mac和Windows上,每个用户都有自己的文件夹。java用我在答案中指定的系统属性返回它。但我必须承认,我从未在移动设备(Android、J2ME等)上尝试过。我们如何在不同的平台上隐藏文件?不必隐藏它们。然后,使用
作为文件名后缀,适用于*nix和mac,但不适用于Windows。然而,这是另一个问题:这种方法与平台无关吗?例如,我如何在不同的操作系统上隐藏文件?是的,在*nix、Mac和Windows上,每个用户都有自己的文件夹。java用我在答案中指定的系统属性返回它。但我必须承认,我从未在移动设备(Android、J2ME等)上尝试过。我们如何在不同的平台上隐藏文件?不必隐藏它们。然后,使用
作为文件名后缀,适用于*nix和mac,但不适用于Windows。然而,这是另一个问题:D