【问题标题】:Storing ArrayList and HashMap using java.util.properties使用 java.util.properties 存储 ArrayList 和 HashMap
【发布时间】:2011-11-19 20:28:47
【问题描述】:

如何使用java.util.properties 存储ArrayList 和/或HashMap 变量?如果不可能,我可以使用什么其他类来存储应用程序配置?

【问题讨论】:

    标签: java properties arraylist hashmap configuration-files


    【解决方案1】:

    如果您只是需要将您的集合序列化为字符串,我强烈推荐XStream。它使用反射将类序列化为 XML。如果默认行为不适用于您要序列化的类,则有文档,但到目前为止,以下内容每次都对我有用:

    XStream xstream = new XStream();
    String xml = xstream.toXML(myObject);
    MyClass deserializedObject = (MyClass)xstream.fromXML(xml);
    assert deserializedObject.equals(myObject);
    

    【讨论】:

    • 这很好,但它没有任何方法来检查和验证输入文件,只会抛出一些错误的异常!
    • @Snigger 异常是验证,如果输入文件无效,则在读取时抛出异常。
    【解决方案2】:

    所以...如果“不要这样做”对您不起作用,那么您需要以某种方式对数据进行编码。一种常见的技术是在每个元素的名称前添加一些字符串。例如,如果我有一个包含 a->1、b->2、c->3 的地图 MyMap,我可能会存储在属性文件中:

    MyMap.a=1
    MyMap.b=2
    MyMap.c=3
    

    对于列表,您也可以这样做,只需将索引映射到值。所以如果 MyList 包含 {a,b,c}

    MyList.0=a
    MyList.1=b
    MyList.2=c
    

    这是一个hack,其他人说的都是真的。但有时你必须做你必须做的。

    【讨论】:

    • 我如何知道列表中有多少项要检索?
    • 要么将其存储为单独的属性,要么只是递增直到您一无所获。考虑使用 ArrayList 而不是数组,所以你不在乎。
    【解决方案3】:

    Properties 基本上是Map<String, String> 意味着键和值都必须是字符串对象。如果您想要更高级的配置,您可以使用 Spring。它是一个出色的框架,我在每个项目中都使用它。 Spring 配置文件非常灵活。

    【讨论】:

      【解决方案4】:

      java.util.Properties 仅用于字符串键和值。它确实从 Hashtable 继承了 put() 和 putAll() 方法,但使用它们来“作弊”很少是一个好主意。您是否考虑过仅将配置信息存储在 HashMap 而不是 Properties 对象中?您必须稍微自定义序列化,但无论如何您都必须这样做,因为您无法利用 Properties 类的默认加载功能。

      【讨论】:

        【解决方案5】:

        存储 HashMap 很容易,因为 Map 中的每个键和值都可以由 Properties 对象中的相应键和值表示(请参阅 Properties 中的 setProperty 方法。

        对于ArrayList,您可以执行类似的操作,键是索引,值是相应索引中的项目。

        在这两种情况下,请记住属性文件只存储字符串,因此您必须设计一种方法将对象中的键和值表示为字符串。

        【讨论】:

          猜你喜欢
          • 2016-11-04
          • 2013-11-01
          • 2023-04-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-18
          • 1970-01-01
          • 2014-03-30
          相关资源
          最近更新 更多