2014-11-14 5 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) для возможного решения –

+0

@RC Я действительно сделал быстрый поиск .. Не смог найти это .. –

+0

@ rey- rajash не проблема, это так, как SO должен работать IMHO;) –

ответ

4

.properties файлы загружены ResourceBundle в HashSet, что не позволяет сохранить заказ. Объект Enumeration, который вы получаете, является просто итератором над множеством.

Я просмотрел класс ListResourceBundle и, к сожалению, он также возвращает объект Enumeration над набором, который не поддерживает порядок.

Редактировать: .properties будет загружен с помощью InputStream в PropertyResourceBundle и хранится в экземпляре Properties, что внутренне представленному Hashtable, которые тоже не поддерживать порядок. Таким образом, заказ теряется довольно рано в процессе и несколько раз позже.

+3

Собственно, это Hashtable ... – Puce

+0

Отредактировано, спасибо помощнику. – marcelv3612

+0

Соответствующий класс свойств расширяет Hashtable, а не HashSet. – Puce

2

ResourceBundle работает на Set, который по своей сути не упорядочен. Вы можете получить все элементы, и это гарантирует, что нет повторяющихся элементов, но он не сохраняет какой-либо порядок элементов.

Вот почему вы не можете получить доступ к элементу по его номеру и прибегать к вашему циклу for. Установки не предназначены для доступа индексированным образом.