[File I/O #2] Resource 구현체 완전 정리
2025. 4. 20. 00:27ㆍ토이프로젝트/파일 업로드&다운로드
목차
1. Resource와 Stream I/O 이해3. InputStream/OutputStream 이해하기
File I/O #2 — Resource 구현체 완전 정리
Resource 인터페이스
public interface Resource extends InputStreamSource {
InputStream getInputStream(); // 리소스를 읽기 위한 InputStream 반환
boolean exists(); // 리소스가 존재하는지 확인
boolean isReadable(); // 읽기 가능한지 확인
File getFile(); // 실제 File 객체로 반환
URL getURL(); // URL 객체 반환
String getFilename(); // 파일 이름 반환
}
Resource는 파일 경로, 클래스 경로, URL 등 다양한 위치의 리소스를 하나의 인터페이스로 추상화합니다.
주요 Resource 구현체 5가지
1. UrlResource (자주 사용)
- HTTP, FTP, 파일 URL 등 URL 기반 리소스를 처리
- file, https, ftp 프로토콜 모두 지원
Resource resource = new UrlResource("https://example.com/data.txt");
if (resource.exists()) {
InputStream is = resource.getInputStream();
// 스트림으로 읽기
is.close();
}
2. ClassPathResource
- 클래스패스 경로에 있는 파일을 읽을 때 사용 (예: src/main/resources)
- 자주 사용되는 설정 파일, 프로퍼티 파일에 적합
Resource resource = new ClassPathResource("config.properties");
InputStream is = resource.getInputStream();
3. FileSystemResource
- 실제 파일 시스템 상의 파일을 절대경로 또는 상대경로로 지정
- 파일 직접 접근이 필요한 경우 사용
Resource resource = new FileSystemResource("/path/to/file.txt");
InputStream is = resource.getInputStream();
4. ServletContextResource
- 웹 애플리케이션 환경에서, 서블릿 컨텍스트 기반 경로로 파일 접근
- 예: /WEB-INF 아래 리소스를 읽을 때
Resource resource = new ServletContextResource(servletContext, "/WEB-INF/config.xml");
InputStream is = resource.getInputStream();
5. ByteArrayResource
- 메모리에 있는 바이트 배열 자체를 리소스로 처리
- 동적으로 생성된 데이터를 스트림으로 처리할 때 유용
byte[] data = "Hello Spring".getBytes();
Resource resource = new ByteArrayResource(data);
InputStream is = resource.getInputStream();
언제 어떤 Resource를 써야 할까?
구현체 | 용도 | 설명 |
---|---|---|
ClassPathResource | 설정 파일, 리소스 파일 | 클래스패스 기준으로 로드 |
FileSystemResource | 로컬 파일 읽기/쓰기 | 절대 또는 상대경로 |
UrlResource | HTTP, FTP 등 외부 리소스 | URL 기반으로 접근 |
ServletContextResource | 웹 컨텍스트 내 리소스 | /WEB-INF 등 내부 파일 |
ByteArrayResource | 메모리 리소스 처리 | 바이트 배열을 스트림으로 |
정리
- Resource는 다양한 위치에 있는 파일을 하나의 방식으로 처리하게 도와줍니다.
- 상황에 따라 적절한 구현체를 선택하세요:
- 설정 파일 → ClassPathResource
- 사용자 업로드 파일 → FileSystemResource
- 외부 API 파일 → UrlResource
- 모든 Resource는 결국
getInputStream()
으로 InputStream으로 변환해 파일 내용을 읽습니다.
'토이프로젝트 > 파일 업로드&다운로드' 카테고리의 다른 글
[File I/O #4] InputStreamReader & BufferedReader 완전 분석 (0) | 2025.04.20 |
---|---|
[File I/O #3] InputStream과 OutputStream 완전 정리 (0) | 2025.04.20 |
[File I/O #1] Java 파일 처리의 기본 개념 정리 (0) | 2025.04.19 |
[Spring-Resource] 스프링 Resource의 이해 (+ InputStream) (0) | 2025.02.24 |