[Java] 자바 Properties 파일 읽는 방법(한글 깨지는 사람 들어오세요)

자바에서 Properties 파일 읽는 방법



현재 저는 3개월차 신입개발자 입니다. 퇴근 후 혼자 스터디하는 겸 수강신청 페이지를 만들고 있습니다. 그 과정에서 공유할 만한 내용을 발견하여 가져왔습니다. 

대부분의 회사들이 db 접속정보나 어떤 페이지에 보여줄 문자들을 .properties나 다른 파일들에 코드형태로 정리하여두고 코드를 불러들여 사용합니다.


예를 들어, 스프링 프레임워크 환경에서 label.properties라는 파일이 있을때


label.properties


1
notice=공지사항
cs


이렇게 저장되어 있다면


<spring:message code="notice" /> 로 코드인 notice를 읽어서 jsp 페이지로 띄울 수 있습니다. 


하지만, 저는 자바부분에서 이러한 properties 파일로 저장된 값들을 불러와야 했습니다.


그래서 다음과 같이 코딩하였습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class MessageUtil {
    public static String getMessage(String code, HttpServletRequest request) {
        String resource = request.getSession().getServletContext().getRealPath("/WEB-INF/messages/message_ko.properties");
        String result="";
        Properties pro = new Properties();
        try
        {
            pro.load(new FileInputStream(resource));
            result = new String(pro.getProperty(code).getBytes("ISO-8859-1"), "utf-8");
            
        }catch(IOException e){
            e.printStackTrace();
        }
        return result;
    }
}
cs


resource 변수 : properties 파일이 저장된 주소.(어쩔 수 없이 하드코딩함.)

result 변수 : 반환될 문자열.(properties에 저장된 문자열이 담길곳)

pro : Properties 객체에 .properties 파일을 담을 것


문제발생 : pro.load()에 FileInputStream으로 읽어들인 properties 파일을 담았는데 pro.getProperties()하는 메소드에서 자꾸 인코딩에 맞지 않는 결과를 가져옴.

애꿎은 파일 인코딩만 건들이다가 요상한 것을 발견함.


getProperty에 코드값을 넣기만하면 올바르지 않은 결과를 가져와서 애꿎은 getProperty 메소드만 의심했었는데 알고보니

load() 메소드 이놈이..... ISO-8859-1 인코딩방식으로 파일을 읽어들여서 내가 파일 인코딩을 utf-8로 하던 다른걸로하던 ISO-8859-1로 인코딩을 하지 않는 한 에러가 발생하지 않을 수가 없었음...



그래서 위에 있는 코드처럼


pro.getProperty(code).getByte("ISO-8859-1")로 인코딩 된것으로 받아서, String으로 반환할때 다시 utf-8로 문자열을 읽도록 하였음...


자바에서 Properties 쓰는데 한글 깨지시는분들 이거로 해보세요...ㅠㅠ


댓글

Designed by JB FACTORY