2014-11-14 3 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를 반환해야합니다.

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

왜 이렇게이다 : 그러나 firstname 이처럼 반환되는 순서를 반환?

+0

가능한 해결책은 [대답] (http://stackoverflow.com/a/11087065/180100) 참조하십시오. –

+0

@RC 실제로 빠른 검색을 수행했습니다. 이것을 찾을 수 없습니다 .. –

+0

@ rey- rajash 문제 없어요,이게 그렇게 IMHO 작동하도록되어있는 방법입니다) –

답변

4

파일은 ResourceBundle에 의해 HashSet에로드되며, 순서는 유지되지 않습니다. 받은 Enumeration 개체는 집합을 반복하는 것입니다.

나는 ListResourceBundle 클래스를 조사했지만 불행히도 순서를 유지하지 않는 세트에 대해 Enumeration 객체를 반환합니다.

편집 : .propertiesPropertyResourceBundleInputStream를 사용하여로드 내부적으로도 질서를 유지하지 않는 Hashtable로 표현된다 Properties의 인스턴스에 저장됩니다. 순서는 과정의 초기에, 그리고 몇 번 후에는 사라집니다.

+3

사실, 그것은 Hashtable ... – Puce

+0

편집 됨, thanks mate. – marcelv3612

+0

관련 Properties 클래스는 HashSet이 아니라 Hashtable을 확장합니다. – Puce

2

ResourceBundleSet에서 작동하며 본질적으로 어떤 식 으로든 주문되지는 않습니다. 모든 요소를 ​​검색 할 수 있으며 중복 요소가 없음을 보장하지만 요소의 순서는 보존하지 않습니다.

이 때문에 번호에 액세스 할 수없고 for 루프를 사용해야합니다. 세트는 색인 된 방식으로 액세스 할 수 없습니다.

관련 문제