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