我目前正在使用java开发桌面应用程序,该应用程序存储用户数据,例如ftp-servers的书签。在决定如何保存这些信息时,我最终使用了xml,因为我喜欢xpath的工作方式。我也在考虑json,这看起来更轻巧。
在java桌面应用程序中存储数据的首选方法(一般情况下)是什么?为什么?那么java-persistence呢,这有什么值得注意的优点吗?用户数据的大小对多少重要?它并不总是可以将数据存储在数据库中(或者更好),根据我的经验,xml不能很好地扩展。让我知道你的想法!
还没有人提到过json,这让我很惊讶。没有合适的情况?
答案 0 :(得分:5)
无论哪种方法有效,都会为您提供良好的性能,并且需要的代码量最少。
Java序列化很容易。除非你有大对象图,否则应该很快。如果您想要与另一种语言进行互操作或希望该文件是人类可读/可编辑的,那么它可能无效。它可能很脆弱。
XML解决了多语言互操作问题,可供人类阅读和编辑。如果您使用Java,Jaxb非常非常容易和直接。如果您需要存储大量设置,可能需要SAX / StAX。您可能希望在非常奇怪的情况下使用DOM / JDom。
如果您要存储和查询许多设置,则可以选择嵌入式SQL数据库。我推荐H2。
答案 1 :(得分:5)
有时,只使用属性文件就足够了。
属性文件是由键/值对组成的文本文件。 java.util.Properties
类用于与属性文件交互。但是,它存储事物列表并不好,因为所有东西都是键/值对。
答案 2 :(得分:2)
没有办法说“我喜欢哪种”。即使在单个应用程序中,我也可能有几种不同的方式来序列化用户数据。举个电脑游戏吧。我希望存储我的游戏首选项,以便我可以使用文本编辑器对其进行编辑。我希望存储我的许可数据,以便全局可访问。我希望存储我的高分数据,以便没有人可以有效地编辑它。我想保存我保存的游戏状态,以便读取和写入非常快。这四种不同的要求可能会在同一个应用程序中产生四种不同的解决方案。
答案 3 :(得分:2)
有两个方面:
如果您想使用RDBMS快速实现它,请使用像SQLite一样的嵌入式数据库。这被许多桌面应用程序使用,例如Firefox。
如果需要考虑性能,请使用嵌入式key-value pairs 类型的存储解决方案。
答案 4 :(得分:1)
如果我们不介意用户调整数据,我们会使用XML。对于更复杂的数据,我们使用SQLite。你可以在这里找到Java实现,
答案 5 :(得分:1)
无论使用何种格式构建文件,最好将文件存储在用户的主目录中:
String userHome = System.getProperty("user.home"); // "/home/myusername"