I.K.Picture & IT Info.

Maven 프로젝트 기반 resources 경로 읽기 본문

Development/Java/Android

Maven 프로젝트 기반 resources 경로 읽기

helpful-intruder 2019. 4. 5. 16:57
반응형

자바 관련 프로젝트를 할 때 기본적으로 Maven 프로젝트를 많이 사용합니다. 

저 물론 또한 그렇구요..

 

엄청 간단한 방법이지만 잘 모르는 분들이 있고 이 부분 때문에 골머리를 가지고 계신 분들이 꽤 있는거 같아서

이렇게 정리해봐요~ 

 

일단 기본적으로 maven 프로젝트는 아래와 같이 구성되어 있습니다. 

 

ProjectName

 ┗src

    ┗main

        ┗java

        ┗resource

     ┗test

 ┗target

 ┗ ...

 

뭐 이렇게 되어 있습니다.

간단한게 그린거지만 뭐 알아보시겠죠??

자 여기서 보면 java쪽에는 클래스들이 들어갈꺼고..

resource 부분에 대부분 어플리케이션에서 읽어들이는 파일이나 정보 등등 이미지 파일 이런것들이 들어가게되는데...

 

이걸 읽기위해서는 어떻게해야되는지~!?

일단 읽으려면 경로를 받아와야겠죠??

 

근데 그 경로를 절대경로로 받아올 경우 향후 빌드를 했을 때 target 안으로 들어가기 때문에

경로가 변경됩니다.. 그렇기 때문에 파일이 없다고 나오죠..

 

이를 유동적인 절대 경로로 받아오기 위해서는 

아래와 같이 경로를 받아오면됩니다. 

getClass().getResource("파일명");

 

간단하죠?? 그런데 여기서 몇가지 얘기를 더하려고 합니다.

 

일단 첫번째!! 파일명을 작성할 때 reousrces 폴더가 root라고 생각하고 반드시 "/" 를 먼저 작성해줘야한다는거죠

예를 들어서

    resources/파일명.txt  라는 파일이 있다고 치면 이렇게 작성해야합니다. 

getClass().getResource("/파일명.txt");

응용으로 resources/test/파일명.txt 일 경우에는

getClass().getResource("/test/파일명.txt");

이렇게가 되겠죠~?

 

이렇게 가면 바로 경로를 String 형태로 받아올 수 있구요

만약 파일을 그대로 스트림 형태로 읽을 것이다 하면

IOUtils.toString(getClass().getResourceAsStream("파일명"), "UTF-8");

을 하면됩니다~

 

물론 IOUtils 를 사용하려면 라이브러리를 추가해줘야겠죠~?

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>common-io</artifactId>
    <version>2.6</version>
</dependency>

반응형
Comments