>Java >java지도 시간 >Java에서 속성 구성 파일을 읽는 방법

Java에서 속성 구성 파일을 읽는 방법

高洛峰
高洛峰원래의
2017-01-12 10:36:091470검색

이 기사의 예에서는 Java에서 속성 구성 파일을 읽는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.

지난 이틀간 자바 프로젝트를 진행하며 프로퍼티 파일을 오랫동안 인터넷에서 검색했지만 만족스러운 방법을 찾지 못했습니다. .properties 파일에서 속성 값을 읽을 수 있게 해줬는데 너무 어려웠습니다. 인터넷에서 속성 값을 얻는 방법은 대략 다음 세 가지가 있습니다. 다음은 date.properties 파일을 예로 사용합니다. 파일 내용은

startdate=2011-02-07
totalweek입니다. =25

방법 1:

public class Stweek {
 static private String startdate = null;
 static private String totalweek = null;
 synchronized static public void loads(){
  if(startdate == null || totalweek == null)
  {
   FileInputStream is = null;
   Properties dbProps = new Properties();
   try {
    is = new FileInputStream(filepath); 
    dbProps.load(is);
    startdate = dbProps.getProperty("startdate");
    totalweek = dbProps.getProperty("totalweek");
   }
   catch (Exception e) {
    System.err.println("不能读取属性文件. " +
    "请确保db.properties在CLASSPATH指定的路径中");
   }
  }
 }
 public static String getStartdate() {
  if(tartdate==null)
   loads();
   return startdate;
 }
 public static String getTotalweek() {
  if(startdate==null)
   loads();
   return totalweek;
 }
}

위의 방법으로도 구성 파일 내용을 얻을 수 있지만 가장 큰 제한 사항은 파일 경로의 위치입니다(즉, 절대 위치 지정을 사용하는 경우 프로젝트를 다른 드라이브 문자로 이동하여 실행하면 소스 코드를 수정해야 합니다. 그렇지 않으면 오류가 보고되지만 상대 경로를 사용하면 Stweek 클래스가 다른 패키지로 이동되면 소스 코드를 수정해야 합니다. 그렇지 않으면 오류가 보고되므로 이 방법은 너무 제한적이고 좋지 않습니다. 다음 방법 2는 이 문제를 해결할 수 있지만 여전히 몇 가지 문제가 있습니다

방법 2:

public class Stweek {
 InputStream is = null;
 Properties dbProps = null;
 public Stweek() {
  // TODO Auto-generated constructor stub
  is = getClass().getResourceAsStream("/date.properties");
  dbProps = new Properties();
  try {
   dbProps.load(is);
  }
  catch (Exception e) {
   System.err.println("不能读取属性文件. " +
   "请确保db.properties在CLASSPATH指定的路径中");
  }
 }
 public String getStartdate()
 {
  String sd = null;
  sd = dbProps.getProperty("startdate");
  return sd;
 }
 public String getTotalweek()
 {
  String totalweek=null;
  totalweek = dbProps.getProperty("totalweek");
  return totalweek;
 }
}

이 방법의 장점은 구성 파일의 절대 경로를 지정할 필요가 없으며 Stweek 클래스를 다른 패키지에 넣거나 전체 프로젝트를 다른 드라이브 문자로 이동하면 코드가 여전히 정상적으로 실행될 수 있으며 파일을 찾을 수 없는 문제도 없습니다. 그러나 구성 파일을 찾을 수 있기를 바라기 때문에 이 방법에는 여전히 큰 결함이 있습니다. 매번 읽을 필요가 없도록 메모리에 캐시됩니다. 모두 하드 디스크에 액세스해야 합니다. (외부 메모리에 액세스하는 데 시간이 너무 많이 걸립니다.) 이러한 이유로 우리는 정적 변수와 정적 메서드를 사용하여 캐시하기를 바랍니다. 변수를 얻고 동시에 이러한 값을 동적으로 로드할 수 있습니다. 그러면 문제가 발생합니다. 왜냐하면 getClass() .getResourceAsStream("/date.properties"); 이 문장은 생성자에만 나타날 수 있기 때문입니다(테스트할 수 있음). 이 방법은 동적 로드에서는 사용할 수 없습니다. 세 번째 방법을 살펴보겠습니다.

방법 3:

import java.io.InputStream;
import java.util.Properties;
public class Stweek {
 static private String startdate = null;
 static private String totalweek = null;
 static{
  loads();
 }
 synchronized static public void loads(){
  if(startdate == null || totalweek == null)
  {
   InputStream is = Stweek.class.getResourceAsStream("/date.properties");
   Properties dbProps = new Properties();
   try {
    dbProps.load(is);
    startdate = dbProps.getProperty("startdate");
    totalweek = dbProps.getProperty("totalweek");
   }
   catch (Exception e) {
    System.err.println("不能读取属性文件. " +
    "请确保db.properties在CLASSPATH指定的路径中");
   }
  }
 }
 public static String getStartdate() {
 if(startdate==null)
  loads();
  return startdate;
 }
 public static String getTotalweek() {
 if(startdate==null)
 loads();
 return totalweek;
 }
}

이 방법은 구성 파일을 자동으로 로드할 수도 있지만 사용자는 수동 로드 프로세스를 전혀 고려할 필요가 없습니다. 필요한 곳에서 Stweek.getStartdate()를 직접 호출하면 됩니다. 정적 메서드를 사용하면 개체를 미리 만들 필요조차 없습니다. 이런 방식으로 메모리에 캐시가 있으면 함수가 메모리의 데이터를 직접 읽어 시간을 절약합니다. 캐시가 없고 시스템이 자동으로 로드하므로 사용자는 구현 방법을 알 필요가 없습니다. 원하는 값을 얻기 위해 함수를 직접 호출할 수 있다는 것만 알아두세요.

이 기사가 나왔으면 좋겠습니다. 위 내용은 모든 사람의 Java 프로그래밍에 도움이 될 것입니다.

Java에서 속성 구성 파일을 읽는 방법에 대한 더 많은 기사를 보려면 PHP 중국어 웹사이트에 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.