在Java应用程序中保存数据的最佳方法是什么?

10
我正在尝试找到保存简单应用程序状态的最佳方法。从数据库的角度来看,有4/5个带日期字段和关系的表。
由于应用程序很简单,而且我希望用户可以选择移动数据(usb盘,dropbox等),所以我想把所有数据放在一个文件中。
什么是最好的方法/库?
通常情况下,XML是最适合此类问题的格式(易读性和开放性),但我没有找到任何不需要进行SAX / DOM处理的杰出库。
4个回答

13
如果您想使用XML,请查看XStream,将Java对象简单序列化为XML。这里是两分钟教程
如果您想要简单的东西,标准的Java属性格式也可以用来存储/加载一些小数据。

1
java.util.Properties 也可以处理 XML。 - Michael Myers
XStream似乎正是我正在寻找的。您是否了解有哪些可用于优化此库中编写的代码?我不应该在每次更改时都写入磁盘。 - fabiopedrosa
完全由您自己来启动写作。XStream 不会为您执行任何自动保存操作。 - Peter Štibraný
如果你正在寻找一个快速的XML解析器,我建议使用Xpp3和XStream。它非常快速和高效。 - user238033

1

考虑使用JDK自带的普通JAXB注释:

@XmlRootElement  
private class Foo {  
    @XmlAttribute  
    private String text = "bar";
}

这里有一篇我的博客文章,详细介绍了JAXB的简单用法(它还提到了一种更“高级”的基于JAXB的方法——以便您更好地控制XML模式,例如保证向后兼容性)。


XStream有什么不同? - lony

0

你可能考虑的其他两个选项 -

  • Hsqldb是一个用Java编写的小型SQL数据库。更重要的是,它可以配置为将数据存储为CSV文件,因此您可以将其文本输出作为便携式数据存储库,并仍然使用SQL,如果这是您喜欢的。
  • 第二个选择可能是直接将数据存储库写入序列化文件,直接或通过类似于Prevayler的库。性能非常好且易于实现,缺点是格式的脆弱性和不透明性。

但是,如果数据足够小,则XML可能会更加方便。


0
如果您不需要为数据提供语义含义,那么XML可能是一个错误的选择。我建议使用更自然地构建数据结构的无冗余替代方案JSON

JSON反序列化很麻烦。没有强类型意味着你需要知道数据结构。虽然不是致命问题,但当我尝试在Java数据保留中使用它时感觉很薄弱。 - Tim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接