Java에서 Properties 클래스는 Hashtable 클래스의 하위 클래스로, 지속적인(persistent) 속성 집합을 나타냅니다. Properties 객체는 스트림에 저장하거나 스트림으로부터 불러올 수 있으며, 속성 목록의 각 키(key)와 그에 대응하는 값(value)은 모두 문자열(String) 형태입니다.
Properties 파일은 Java 애플리케이션에서 설정 정보를 외부화(externalize)하고 키-값(key-value) 쌍 형태로 저장하는 데 널리 사용됩니다. 특히 데이터베이스 접속 정보, API 키 등 민감한 설정값을 소스 코드와 분리하여 관리할 때 유용합니다.
Properties 클래스 문법
public class Properties extends Hashtable
credentials.properties 파일 예시
아래와 같이 키-값 쌍으로 구성된 속성 파일을 준비합니다.
username=admin password=admin@123
Properties 파일 읽기 예제 코드
Properties.load() 메서드를 사용하면 .properties 파일을 키-값 쌍 형태로 간편하게 로드할 수 있습니다. 아래 예제는 파일을 읽어 username과 password 값을 출력하는 전체 과정을 보여줍니다.
import java.io.*;
import java.util.*;
public class ReadPropertiesFileTest {
public static void main(String args[]) throws IOException {
Properties prop = readPropertiesFile("credentials.properties");
System.out.println("username: " + prop.getProperty("username"));
System.out.println("password: " + prop.getProperty("password"));
}
public static Properties readPropertiesFile(String fileName) throws IOException {
FileInputStream fis = null;
Properties prop = null;
try {
fis = new FileInputStream(fileName);
prop = new Properties();
prop.load(fis);
} catch(FileNotFoundException fnfe) {
fnfe.printStackTrace();
} catch(IOException ioe) {
ioe.printStackTrace();
} finally {
fis.close();
}
return prop;
}
}실행 결과
username: admin password: admin@123
코드 설명 및 참고 사항
위 코드의 핵심 흐름은 다음과 같습니다.
1. FileInputStream 생성: 대상 .properties 파일을 바이트 스트림으로 엽니다.
2. load() 호출: Properties 객체의 load() 메서드가 스트림 내용을 파싱하여 키-값 쌍을 메모리에 저장합니다.
3. getProperty()로 값 조회: 저장된 키를 기준으로 값을 가져올 수 있습니다.
4. finally 블록에서 자원 해제: 예외 발생 여부와 관계없이 스트림을 닫아 리소스 누수를 방지합니다.
참고로 Java 7 이상에서는 try-with-resources 구문을 사용하면 close() 호출 없이도 자동으로 자원이 해제되므로 더욱 안전한 코드 작성이 가능합니다.