스프링 프로젝트에서 리소스 파일 읽기

리소스(Resource)

Maven이나 Gradle을 사용하여 스프링 프로젝트를 만들게 되면 src/main/resources 디렉토리에 리소스 파일을 저장하게 되어있습니다. *.java 파일처럼 컴파일 대상이 되는 소스파일이 아닌 파일들을 리소스 디렉토리에 저장하여 관리합니다.

1
2
3
4
src
- main
- java (소스파일을 저장)
- resources (리소스 파일을 저장)

프로젝트를 빌드하면 리소스 파일들은 CLASS_PATH에 위치하게 됩니다.

리소스 파일 가져오기

스프링 프레임워크에는 이러한 CLASS_PATH에 저장된 리소스 파일을 쉽게 가져올 수 있도록 해주는 ClassPathResource클래스를 제공합니다.
예를들어, src/main/resources/data/data.txt 에 위치한 파일을 가져오려면 아래와 같이 코드를 작성합니다.

1
ClassPathResource resource = new ClassPathResource("data/data.txt");

ClassPathResource는 스프링 프레임워크가 제공하는 클래스로, 리소스에 대한 파일 이름, File 객체, URL, URI 등 리소스와 관련된 정보를 제공합니다.

1
2
3
4
5
6
resource.getFile(); // 파일 객체
resource.getFilename(); // 파일 이름
resource.getInputStream() // InputStream 객체
resource.getPath(); // 파일 경로
resource.getURL(); // URL 객체
resource.getURI(); // URI 객체

가져온 리소스 파일의 내용 읽기

가져온 리소스 파일의 내용은 Java7에 새롭게 추가된 nio 패키지의 Files, Paths를 사용하면 쉽게 읽을 수 있습니다.
여기서는 간단하게 파일의 내용일 라인단위로 읽어오도록 하겠습니다. Files.readAlllines() 메서드를 사용하면 Path에 존재하는 파일의 내용일 읽어서 List<String> 타입으로 가져올 수 있습니다.

1
2
3
4
5
6
7
8
9
ClassPathResource resource = new ClassPathResource("data/data.txt");
try {
Path path = Paths.get(resource.getURI());
List<String> content = Files.readAllLines(path);
content.forEach(System.out::println);
} catch (IOException e) {
log.error("{}", e.getMessage(), e);
}

위 코드 처럼 Paths.get() 메서드를 사용해서 리소스의 URI로부터 Path 객체를 생성한 후, Files.readAllLines(path) 메서드를 호출하면 Path에 해당하는 파일 내용을 쉽게 읽어올 수 있습니다.

Share