ResourceBundle을 사용하여 구성 파일을 읽는 방법

4803 단어 응용 서버.netsun
자바의 기초가 좋은 사람에게 이것은 더 이상 간단할 수 없는 간단해야 한다.그러나 일부 자바 초보자들은 반드시 알지 못할 것이다. (예를 들어 나는 지난번에 다른 사람을 위해 글을 썼는데 외부에서 파일을 읽어서 대상의 값을 설정해야 한다. Resource Bundle 같은 것이 있는지 몰라서 File Reader로 그곳에서 한참을 괴롭혔지만 결국은 설정 파일과jar 패키지를 함께 발표하지 못해 답답하다).
우리는 모든 대상에서 Resource Bundle로 프로필을 읽고 자신의 값을 설정할 수도 있고, 나중에 사용할 수 있도록 고정된 대상을 읽어서 저장할 수도 있다.모든class에서 프로필을 읽으면 코드가 흐트러지기 때문에 하나의class로만 읽는 것이 비교적 합리적인 방법이다.또한 입출력 속도가 느리기 때문에 프로필을 읽는 class가 이 프로필을 사용할 때마다 파일을 읽으면 성능상의 병목이 되기 쉽다.이러한 상황을 피하기 위해 초기화할 때 설정 항목을 한 번에 모두 읽고 정적 구성원 변수에 저장할 수 있습니다.그러나 설정 항목에 대한 동적 읽기 수요는 배제할 수 없습니다. (일부 응용 프로그램은 멈출 수 없기 때문입니다. 예를 들어 응용 서버입니다. 이 응용 프로그램들이 실행되는 동안 설정 파일을 업데이트했기 때문에 설정을 닫지 않고 다시 읽어야 합니다.)다음 예는 정적 읽기 상황만 고려합니다. 동적 읽기라면 읽기 프로필의 코드를 어떤 방법에 넣고 이벤트에 대한 응답을 통해 이 방법을 호출하여 프로필을 업데이트할 수 있습니다.
프로필을 읽는 데 사용되는class는TestResourceBundle라고 가정합니다. 프로필의 값은property 라고 합니다.en.properties 파일 (이 파일은Test Resource Bundle에 대응하는 CLASSPATH 디렉터리에 두어야 합니다.) 두 가지 값을 설정해야 합니다:name과value.먼저 다음과 같은 문자열 상수를 class에 정의해야 합니다.
public static final String PROPERTIES_FILE_NAME = "property"; 
public static final String MY_NAME_KEY = "name"; 
public static final String MY_VALUE_KEY = "value"; 

여기서 PROPERTIESFILE_NAME은 파일의 이름을 나타냅니다.실제로 읽은 파일은propertyen.properties, 단 Resource Bundle 파일 이름이 "이라는 것만 알려주십시오.property"충분해.밑줄과 뒤의 "en"현지화된 정보를 나타낸다.여기 엔 대표 & quot;ENGLISH",접미사properties가 기본값입니다.MY_NAME_KEY와 MYVALUE_KEY는 설정 항목의 이름을 표시합니다. Resource Bundle의 getstring 방법으로 이 이름에 따라 값을 읽습니다.
그리고 설정해야 할 변수를 정의합니다.이러한 변수는 정적이어야 합니다.
private static String myName; 
private static String myValue; 

정적 초기화:
static { 
try { 
   ResourceBundle bundle = ResourceBundle 
     .getBundle(PROPERTIES_FILE_NAME, Locale.ENGLISH); 
   myName = bundle.getString(MY_NAME_KEY).trim(); 
   myValue = bundle.getString(MY_VALUE_KEY).trim(); 
} 
catch(Exception ex) { 
   System.err.println(  "[Property]:Can't Load property.properties"); 
   myName = "default name"; 
   myValue = "default value"; 
   System.out.println(  "myName will use the default value: " + myName); 
   System.out.println(  "myValue will use the default value: " + myValue); 
} 
} 

ResourceBundle bundle = ResourceBundle   .getBundle(PROPERTIES_FILE_NAME, Locale.ENGLISH);
이 코드는 ResourceBundle, Locale을 초기화합니다.ENGLISH는 현지화 상태를 나타내는 데 사용되기 때문에 "property_en.properties"구문을 사용합니다.Locale인 경우CHINA는 property에서zh.properties에서 읽습니다.이런 메커니즘은 프로그램의 현지화를 간단하게 한다.
myName = bundle.getString(MY_NAME_KEY).trim();
이 코드는 설정 파일의 이름을 "로 읽습니다.name"의 변수 값을 정적 변수 myName에 지정합니다.
이 코드는 읽기 실패할 때 설정 항목에서 절약 값을 사용합니다.
이렇게 하면, 이 클래스는 ResourceBundle에서 메모리에 있는 프로필을 읽어서 데이터를 설정합니다.
property_en.properties 파일의 내용은 다음과 같습니다
# properties sample
#
name=sega
value=100
여기서'#'로 시작하는 동작 설명은 ResourceBundle에서 이러한 행을 만났을 때 무시됩니다.
다음은 전체 테스트 코드입니다.
public class TestResourceBundle {
 public static final String PROPERTIES_FILE_NAME = "property";
 public static final String MY_NAME_KEY = "name";
 public static final String MY_VALUE_KEY = "value";
 
 private static String myName;
 private static String myValue;
 static {
   try {
     ResourceBundle bundle = ResourceBundle
  .getBundle(PROPERTIES_FILE_NAME, Locale.ENGLISH);
     myName = bundle.getString(MY_NAME_KEY).trim();
     myValue = bundle.getString(MY_VALUE_KEY).trim();
   }
   catch(Exception ex) {
  System.err.println(    "[Property]:Can't Load property.properties");
  myName = "default name";
  myValue = "default value";
  System.out.println(    "myName will use the default value: " + myName);
  System.out.println(    "myValue will use the default value: " + myValue);
   }
 }
 
 public void print() {
  System.out.println("My name is: " + myName);
  System.out.println("My value is: " + myValue);
 }
 public static void main(String[] args) {
  TestResourceBundle test = new TestResourceBundle();
  test.print();
 }
}

ResourceBundle에 대한 자세한 내용은 다음 링크를 참조하십시오.
http://ja va.sun.com/docs/books/tutorial/i18n/resbundle/index.html (English)
http://www.leftworld.net/online/j2sedoc/ja varef/ja va.util.resourcebundle_dsc.htm(중국어)

좋은 웹페이지 즐겨찾기