java, 정적 파일 및 이미지 읽기

정적 파일 열기

  • URL이나 프로젝트 외부의 절대 경로에 특정 파일을 찾으려면 해당 url을 입력하면 된다.
  • 만약 현 자바 어플리케이션 내부에 존재하는 정적 파일은 어떻게 접근할까?
  • 프로젝트 내부의 다음과 같은 경로에 아래의 문서파일이 있다고 가정하자.

  • 위치 : src/test/resources/files/text.txt
hello,
text!
  • 다음과 같은 그래프를 통해 접근한다 : getClass().getClassLoader().getResource("files/text.txt").getFile()
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import java.io.*;

import static org.assertj.core.api.Assertions.assertThat;

public class TextTest {
    @Test
    @DisplayName("resources에 있는 텍스트 파일을 읽는다.")
    void read_text(){
        // given
        File file = new File(getClass().getClassLoader().getResource("files/text.txt").getFile());
        assert file.canRead();

        // when
        int idx = 0;
        String[] text = new String[2];
        try(BufferedReader br = new BufferedReader(new FileReader(file))){
            String str;
            while((str = br.readLine())!=null){
                text[idx++] = str;
            }
        } catch (IOException e) {
            throw new IllegalArgumentException(e);
        }

        // then
        assertThat(text[0]).isEqualTo("hello,");
        assertThat(text[1]).isEqualTo("text!");
    }
}

이미지 파일 꺼내기

  • 이미지 파일은 위와 동일한 방식으로 하되, ImageIO와 BufferedImage를 활용한다.
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

import static org.assertj.core.api.Assertions.assertThat;

public class ImageTest {
    
    @Test
    @DisplayName("resources에 있는 이미지 파일을 읽는다.")
    void read_image() throws IOException {
        // given
        File file = new File(getClass().getClassLoader().getResource("files/android.png").getFile());
        assert file.canRead();

        // when
        final BufferedImage bi = ImageIO.read(file);

        // then
        assertThat(file.length()).isEqualTo(90902L);
        assertThat(bi.getWidth()).isEqualTo(1745);
        assertThat(bi.getHeight()).isEqualTo(2048);
    }
}

소스 : https://github.com/infoqoch/openstudy/tree/master/resource