반응형
자바에서 사용되는 인터페이스 중에 Resource라는 이름을 가진 인터페이스가 있다.
공식 홈페이지에서 소개하는 글은 아래와 같다.
https://docs.spring.io/spring-framework/reference/core/resources.html
import org.springframework.core.io.Resource;
import 자체는 위 경로로 import 가 되고 내부를 살펴보면 아래 코드와 같다.
public interface Resource extends InputStreamSource { boolean exists(); boolean isReadable(); boolean isOpen(); boolean isFile(); URL getURL() throws IOException; URI getURI() throws IOException; File getFile() throws IOException; ReadableByteChannel readableChannel() throws IOException; long contentLength() throws IOException; long lastModified() throws IOException; Resource createRelative(String relativePath) throws IOException; String getFilename(); String getDescription(); } |
이미 InputStreamSource 를 상속 받고 있고 InputStreamSource 인터페이스는 아래와 같다.
public interface InputStreamSource { InputStream getInputStream() throws IOException; } |
Resource 인터페이스의 주요 메서드
- getInputStream() : 자원을 탐색하여 열고 자원을 읽기 위해서 InputStream 타입으로 반환
- exists() : 접근하고자 하는 자원이 존재하는지 확인
- isOpen() : 해당 자원에 접근하고 있는 스트림이 있는지 여부를 확인.
true라면 입력 스트림을 여러번 읽을 수 없으며, 자원 누수를 방지하기 위해 한번만 읽은 다음 닫아야 함.
InputStreamResource를 제외한 모든 일반적인 자원 구현에 대해 false를 반환 - getDescription() : 자원을 사용할때 오류 출력에 사용되는 설명을 반환.
이것은 종종 자원의 정규화된 파일 이름 또는 실제 URL이 됨
대표적으로 Resource를 구현한 구현체들의 목록
UrlResource | URL을 기준으로 리소스를 읽어들임 지원하는 프로토콜 http, https, ftp, file, jar |
ClassPathResource | 클래스패스를 기준으로 리소스를 읽어드림. classapth: |
FileSystemResource | 파일시스템을 기준으로 리소스를 읽어드림. |
ServletContextResource | 웹 어플리케이션 루트에서 상대 경로로 리소스를 찾는다. |
각 구현체의 테스트 예제 코드는 아래와 같으니 참고 바란다.
@Component public class AppRunner implements ApplicationRunner { @Autowired ResourceLoader resoureLoader; @Override public void run(ApplicationArguments args) throws Exception { // ClassPathResource("") = resourceLoader.getResource("classpath:") var cpr = new ClassPathResource("text.txt"); // 존재 여부 System.out.println(cpr.exists()); // classsPath System.out.println(cpr.getDescription()); // txt 파일의 내용 System.out.println(Files.readString(Path.of(cpr.getURI()))); // resourceLoader Resource resource = resoureLoader.getResource("classpath:text.txt"); System.out.println(resource.exists()); System.out.println(resource.getDescription()); System.out.println(Files.readString(Path.of(resource.getURI()))); // FileSystemResource("") = resourceLoader.getResource("file:") var fsr = new FileSystemResource("C:/thenicesj/spring/src/main/java/com/test/filetext.txt"); System.out.println(fsr.exists()); System.out.println(fsr.getDescription()); System.out.println(Files.readString(Path.of(fsr.getURI()))); // resourceLoader Resource resource2= resoureLoader.getResource("file:/C:/thenicesj/spring/src/main/java/com/test/filetext.txt"); System.out.println(resource2.exists()); System.out.println(resource2.getDescription()); System.out.println(Files.readString(Path.of(resource2.getURI()))); } } |
반응형
'IT > Java' 카테고리의 다른 글
Spring Batch 파일 읽기(FlatFileItemReader / MultiResourceItemReader) (18) | 2024.06.18 |
---|---|
spring 에서 데이터 초기화 방법(Hibernate / sql 사용) (16) | 2024.06.17 |
특정 폴더 내에 파일 리스트 뽑아오는 법 (16) | 2024.06.15 |
[QueryDSL] 사용법 (17) | 2024.06.12 |
[Error] com.querydsl.core.types.QBean com.example.queyrdsl.entity.test with modifiers "protected" (12) | 2024.06.11 |
댓글