-
properties파일 ,ResourceBundle객체-22.04.12고급자바 2022. 4. 12. 12:52728x90
properties란?
Key=Value형식으로 파라미터 정보들을 저장하기 위한 파일 확장자를 의미합니다. 주로 응용 프로그램에 대한 환경설정정보, DB와 연결하기 위한 DB환경설정정보 등을 저장할 때 properties파일을 만들어 그 곳에 저장해놓습니다.
주석처리를 하고 싶은 경우 맨 앞에 "#", "!"을 붙여 주석처리를 합니다.
하드코딩을 피하고 중요한 키나 패스워드는 코드에 직접 입력하지 않고 외부 파일에서 읽어 사용합니다.
그럴때 보통 Properties 파일을 많이 사용합니다.
특징
key value는 문자열만 가능하다src : 소스폴더를 말함
리소스(줄여서 res)라는 파일을 새로 소스폴더를 만들어줌
res를 만들어주는 이유는 자바소스가 아닌것들을 따로 분리해서 관리하고 싶어서 한것임
소스파일은 컴파일의 대상~ 그래서 컴파일되면 bin폴더에 가있게된다. (output폴더에 들어가게됨)output folder :
JDBCTest/bin 가 실행이된다. 컴파일된 코드가 들어가게됨
<properties 만드는 방법>
properies설치하기(보기 좋게하려고)
help=> 뉴 인스톨 소프트웨어
Add 누르고 http://propedit.sourceforge.jp/eclipse/updates/ 이경로 입력하고 이름을 Properties Editor라고 지어준다.
도중에 동의한다고 눌러주고 새로시작하면 됨원래는 한글이 안됨 못쓴다 하지만 새로 깔았기 때문에 한글 편집이 가능하다.
package kr.or.ddit.basic; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Enumeration; import java.util.Properties; /** * 외부의 properties파일을 읽어와 Properties객체로 처리하기 * @author 306-10 * */ public class T02_PropertiesTest { public static void main(String[] args) { //읽어온 정보를 저장할 Properties객체 생성 Properties prop = new Properties(); //읽어올 파일명을 이용한 File객체 생성 File file = new File("./res/db.properties"); try { //파일 읽기를 수행할 FileInPutStream객체 생성하기 FileInputStream fis = new FileInputStream(file); //Properties객체로 파일 내용 읽기 //파일 내용을 읽어와 key와 value값으로 분류한 후 Properties객체에 담아준다. prop.load(fis); //읽어온 자료 출력하기 Enumeration<String> keys = (Enumeration<String>)prop.propertyNames(); while(keys.hasMoreElements()) { String key =keys.nextElement(); String value = prop.getProperty(key); System.out.println(key + ":" + value); } System.out.println("출력 끝..."); }catch (IOException e) { e.printStackTrace(); } } }
driver=oracle.jdbc.driver.OracleDriver url=jdbc:oracle:thin:@localhost:1521:xe username=LAI password=java
그러면 JDBCUtil을 수정하기위해 복사하여 JDBCUtil2를 만들어주고 properties객체를 이용해본다.
이 선언해놓은 변수들을 이용하여 호출하면 된다.
package kr.or.ddit.util; import java.sql.Statement; import java.util.Properties; import java.io.FileInputStream; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; /** * JDBC드라이버를 로딩하고 Connection객체를 생성하는 메서드로 구성된 클래스 * 방법1) Properties객체를 이용하여 DB정보 가져오기 * */ public class JDBCUtil2 { static Properties prop; //객체 변수 선언 static { prop = new Properties(); try { //파일 읽기를 수행할 FileInPutStream객체 생성하기 FileInputStream fis = new FileInputStream("res/db.properties"); //Properties객체로 파일 내용 읽기 //파일 내용을 읽어와 key와 value값으로 분류한 후 Properties객체에 담아준다. prop.load(fis); }catch(IOException e){ e.printStackTrace(); } try { Class.forName(prop.getProperty("driver")); //클래스 정보 있는지 없는지 확인 , 즉 필드패쓰 잘 잡았는지도 확인해줌 System.out.println("드라이버 로딩 성공!"); } catch (ClassNotFoundException e) { System.out.println("드라이버 로딩 실패!!!"); e.printStackTrace(); } } public static Connection getConnection() { try { return DriverManager.getConnection(prop.getProperty("url"), prop.getProperty("username"), prop.getProperty("password")); }catch(SQLException e) { System.out.println("DB 연경 실패!!!"); e.printStackTrace(); return null; } } //자원반납 public static void close(Connection conn, Statement stmt, PreparedStatement pstmt, ResultSet rs) { if(rs !=null) try {rs.close();}catch(SQLException ex) {} if(pstmt !=null) try {pstmt.close();}catch(SQLException ex) {} if(stmt !=null) try {stmt.close();}catch(SQLException ex) {} if(conn !=null) try {conn.close();}catch(SQLException ex) {} } }
T01_Member~를 실행하여 JDBCUtil2의 드라이버를 바꿔준다(Ctrl+F를 누르고 replaceAll을 누르면 전체적으로 바뀐다..)
작동 잘된것을 확인할 수 있다.
ResourceBundle객체
ResourceBundle객체 => 확장자가 properties인 파일 정보를 읽어와
key값과 value 값을 분리한 정보를 갖는 객체
=> 읽어올 파일은 'key값 = value값' 행태로 되어 있어야 한다.package kr.or.ddit.basic; import java.util.Enumeration; import java.util.ResourceBundle; public class T03_ResourceBundleTest { /* ResourceBundle객체 => 확장자가 properties인 파일 정보를 읽어와 key값과 value 값을 분리한 정보를 갖는 객체 => 읽어올 파일은 'key값 = value값' 행태로 되어 있어야 한다. */ public static void main(String[] args) { /* ResourceBundle객체 생성하기 => 파일을 지정할 때는 '파일명' 만 지정하고 확장자는 지정하지 않는다. (이유 : 확장자는 항상 properties이기 때문에...) */ ResourceBundle bundle = ResourceBundle.getBundle("db"); //확장자 생략 Enumeration<String> keys = bundle.getKeys(); while(keys.hasMoreElements()) { String key =keys.nextElement(); String value = bundle.getString(key); System.out.println(key + ":" +value); } System.out.println("출력 끝."); } }
뉴 파일 생성하여 이 파일들에 greeting :안녕하세요 영어면 greeting: Hello 를 써주고 저장한다 그러면
영어나 한국 일본 언어들 읽어올 수도 있음package kr.or.ddit.basic; import java.util.Enumeration; import java.util.Locale; import java.util.ResourceBundle; public class T03_ResourceBundleTest { /* ResourceBundle객체 => 확장자가 properties인 파일 정보를 읽어와 key값과 value 값을 분리한 정보를 갖는 객체 => 읽어올 파일은 'key값 = value값' 행태로 되어 있어야 한다. */ public static void main(String[] args) { /* ResourceBundle객체 생성하기 => 파일을 지정할 때는 '파일명' 만 지정하고 확장자는 지정하지 않는다. (이유 : 확장자는 항상 properties이기 때문에...) */ ResourceBundle bundle = ResourceBundle.getBundle("db",Locale.ENGLISH); //한국이면 Locale.KOREAN Enumeration<String> keys = bundle.getKeys(); while(keys.hasMoreElements()) { String key =keys.nextElement(); String value = bundle.getString(key); System.out.println(key + ":" + value); } System.out.println("출력 끝."); } }
728x90'고급자바' 카테고리의 다른 글
JDBC(Java Database Connectivity)-22.04.11 (0) 2022.04.11 직렬화2-22.04.11 (0) 2022.04.11 직렬화,역직렬화-22.04.01 (0) 2022.04.01 기본타입 입출력 보조 스트림-22.04.01 (0) 2022.04.01 성능향상을 위한 보조 스트림-22.04.01 (0) 2022.04.01