2014-11-14 53 views
0

我有這樣一個label.properties文件:爲什麼我無法按順序讀取.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

看到[這個答案](http://stackoverflow.com/a/11087065/180100)爲一個可能的解決方案 – 2014-11-14 12:22:56

+0

@RC我實際上做了一個快速搜索..沒能找到這個.. – 2014-11-14 12:26:22

+0

@ rey- rajash沒問題,這是這樣的方式應該工作恕我直言;) – 2014-11-14 12:27:32

回答

4

.properties文件通過ResourceBundle加載到HashSet,它不保留順序。您收到的Enumeration對象只是該集合的迭代器。

我看着ListResourceBundle類,不幸的是它也返回一個Enumeration對象而不是維護順序的集合。

編輯.properties將利用InputStreamPropertyResourceBundle被加載並存儲在Properties一個實例,其內部由一個Hashtable其太不保持順序來表示。所以訂單在整個過程中很早就失敗了,而且幾次都沒有。

+3

其實,它的散列表... – Puce 2014-11-14 12:28:22

+0

編輯,謝謝隊友。 – marcelv3612 2014-11-14 12:44:50

+0

相關的Properties類擴展了Hashtable,而不是HashSet。 – Puce 2014-11-14 12:56:11

2

ResourceBundle適用於Set,本質上不以任何方式排序。您可以檢索所有元素,並確保沒有重複元素,但不保存元素的任何順序。

這就是爲什麼你不能訪問一個元素的數量,並不得不訴諸你的for循環。集合並不意味着以索引方式訪問。

相關問題