【问题标题】:Is there an equivalent of java.util.Properties for sets?是否有等效于 java.util.Properties 的集合?
【发布时间】:2009-07-07 10:06:17
【问题描述】:

我想将文件中的行读入 Set 或 List。是否有执行此操作的标准实用程序?

如果这些行的格式为 [key]=[value],我可以这样做:

Properties properties = new Properties();
properties.load(new FileInputStream(file));

这些值是单个条目,每行一个,每个值都成为 Set/List 中的一个条目

我知道可以使用 LineReader、InputStreams 和大量样板来完成,但我希望避免这种情况。

【问题讨论】:

    标签: java collections file-io


    【解决方案1】:

    是的,Properties 类本身提供了用于转换的访问器方法:

    public Set entrySet()

    返回此映射中包含的映射的 KeySet 视图。集合由地图支持,因此对地图的更改会反映在集合中,反之亦然。如果在对集合进行迭代时修改了映射(通过迭代器自己的删除操作或通过迭代器返回的映射条目上的 setValue 操作除外),则迭代的结果是未定义的。该集合支持元素移除,即通过 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作从映射中移除相应的映射。它不支持 add 或 addAll 操作。

    公共设置 keySet()

    返回此映射中包含的键的 KeySet 视图。集合由地图支持,因此对地图的更改会反映在集合中,反之亦然。如果在对集合进行迭代时修改了映射(通过迭代器自己的删除操作除外),则迭代的结果是不确定的。该集合支持元素移除,即通过 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作从映射中移除相应的映射。它不支持 add 或 addAll 操作。

    您也可以使用 elements()

    枚举属性

    【讨论】:

    • 谢谢 我以为它会失败,因为该值为空,看来它使条目成为带有“=”后缀的键。对您的答案的一条评论,看起来泛型被解释为 html。
    • 编辑我上面的评论,值是空字符串,所以条目的toString()变成了[key]=""
    【解决方案2】:

    如果按照标准实用程序,您指的是 3rd-party 库,那么我的答案是:几乎!

    Apache Commons 值得成为几乎所有 Java 应用程序的一部分。使用 Apache Commons 中的 IOUtils,您可以通过以下方式实现您所描述的:

        final List list = IOUtils.readLines(new FileInputStream(file));
        Set<String> set = new HashSet<String>(list);
    

    该集合将包含文件中的每一行。

    注意:IOUtils 不支持泛型,所以这段代码会给出编译警告。

    【讨论】:

    • 不知道为什么这被否决了,对我来说似乎是一个合理的答案。这种方法的优点是您的 Set 不受 Map 的支持。缺点是它不会忽略文件中的 cmets 等,所以需要自己处理或确保没有。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 2014-01-25
    相关资源
    最近更新 更多