为什么我不能按顺序读取.properties文件?

时间:2014-11-14 12:18:30

标签: java properties-file

我有一个像这样的label.properties文件:

text1:firstname
text2:middlename
text3:lastname
text4:username

我使用此代码

读取属性文件
package test;

import java.util.Enumeration;
import java.util.ResourceBundle;


public class labelclass {

    public static String read(int n) {

        ResourceBundle rb = ResourceBundle.getBundle("myfolder.label");
        Enumeration <String> keys = rb.getKeys();
        while (keys.hasMoreElements()) {
            for(int i=1; i<=n; i++){
                    String key = keys.nextElement();
            }
            String value = rb.getString(key);
            return value;
        }
    }

}

如果我致电read(2),则应该返回middlename。但它会返回firstname 它返回的顺序如下:

text2:middlename
text1:firstname
text4:username
text3:lastname

为什么会这样?

2 个答案:

答案 0 :(得分:4)

.properties个文件由ResourceBundle加载到HashSet,但不保留订单。您收到的Enumeration对象只是集合上的迭代器。

我查看了ListResourceBundle类,不幸的是它也在一个不维护顺序的集合上返回一个Enumeration对象。

修改.properties将使用InputStream中的PropertyResourceBundle加载,并存储在内部由Properties表示的Hashtable实例中{3}}这也不能维持秩序。因此,订单在此过程中很早就会丢失,之后会多次丢失。

答案 1 :(得分:2)

ResourceBundle适用于Set,其本质上不以任何方式排序。您可以检索所有元素,并确保没有重复元素,但它不保留任何元素顺序。

这就是为什么您无法通过其编号访问元素并且必须求助于您的for循环。集合不应以索引方式访问。