我有一个像这样的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
为什么会这样?
答案 0 :(得分:4)
.properties
个文件由ResourceBundle加载到HashSet,但不保留订单。您收到的Enumeration对象只是集合上的迭代器。
我查看了ListResourceBundle类,不幸的是它也在一个不维护顺序的集合上返回一个Enumeration对象。
修改:.properties
将使用InputStream中的PropertyResourceBundle加载,并存储在内部由Properties表示的Hashtable实例中{3}}这也不能维持秩序。因此,订单在此过程中很早就会丢失,之后会多次丢失。
答案 1 :(得分:2)
ResourceBundle
适用于Set
,其本质上不以任何方式排序。您可以检索所有元素,并确保没有重复元素,但它不保留任何元素顺序。
这就是为什么您无法通过其编号访问元素并且必须求助于您的for循环。集合不应以索引方式访问。