Java – 리소스 폴더에서 파일 읽기
Java에서는 또는 getResource
: resources
폴더 또는 클래스 경로의 루트에서 파일 또는 여러 파일을 읽습니다.
p>
getResourceAsStream
메소드는 InputStream
를 반환합니다.
getResource
메소드는 URL
를 반환하고 일반적으로 File
로 변환합니다. JAR 파일에서 작동하지 않습니다.
자원 폴더의 파일
1.1 src/main/resources
의 파일을 검토하고 나중에 파일에 액세스하고 파일 내용을 인쇄합니다.
1.2 기본적으로 Maven, Gradle과 같은 도구를 빌드합니다. , 또는 일반적인 Java 실행은 src/main/resources
의 모든 파일을 target/classes
또는 build/classes
. 따라서 src/main/resources
에서 파일을 읽으려고 할 때 프로젝트 클래스 경로의 루트에서 파일을 읽습니다.
1.3 다음은 JAR 파일 구조입니다. 일반적으로 resources
폴더의 파일은 클래스 경로의 루트로 복사됩니다.
자원 폴더에서 파일을 가져옵니다.
2.1 아래 예는 getResourceAsStream
및 메서드를 사용하여 resources
폴더에서 json/file1.json
파일을 읽고 파일 내용을 인쇄합니다.
참고
-
getResource
메소드는 JAR 파일에서 작동하지 않습니다. -
getResourceAsStream
메소드는 모든 곳에서 작동합니다.
출력
2.2 이제 프로젝트를 JAR 파일로 압축하고 실행합니다. 이번에는 getResource
가 실패하고 NoSuchFileException
또는 InvalidPathException
를 반환합니다. 리소스 URL을 통해 JAR 파일에있는 파일을 읽을 수 없습니다.
Linux (Ubuntu)에서 JAR 파일을 실행하면 NoSuchFileException
가 발생합니다.
Windows에서 JAR 파일을 실행하면 InvalidPathException
가 발생합니다.
PS This 예제에서는 Maven 플러그인 maven-jar-plugin
를 사용하여 JAR 파일을 만듭니다.
리소스 폴더에서 파일 가져 오기 – 단위 테스트
3.1 단위 테스트를 위해 src/test/resources
폴더에 테스트 리소스를 저장합니다. 일반적으로 테스트 리소스의 파일은 target/test-classes
폴더로 복사됩니다.
3.2 작동합니다 src/main/resources
에서 파일을 읽는 것과 같은 방식입니다. 동일한 getResourceAsStream
및 getResource
방법을 사용하여 src/test/resources
에서 파일을 읽습니다.
출력
리소스 폴더에서 모든 파일을 가져옵니다. (비 JAR 환경)
정확한 파일 이름을 모르고 리소스 폴더의 하위 폴더 파일을 포함한 모든 파일을 읽으려면 NIO Files.walk
파일에 쉽게 액세스하고 읽을 수 있습니다.
4.1 아래 예에서는 Files.walk
를 사용하여 :
출력
4.2 그러나 표준 Files.walk
는 JAR 파일의 파일에 직접 액세스 할 수 없습니다. JAR 환경에서 예제 4.1을 실행하면 FileSystemNotFoundException
가 발생합니다.
리소스 폴더에서 모든 파일을 가져옵니다. (JAR 버전)
5.1이 예는 FileSystems
및 URI를 통해 JAR 파일 내의 폴더를 Files.walk
하는 방법을 보여줍니다. jar:file:xxx.jar
.
아이디어 :
- 파일은 , 모든 파일 이름 가져 오기,
getPathsFromResourceJAR()
참조 - 모든 파일 이름 반복, 예제 2.1과 같이 각 파일 액세스 및 인쇄,
getFileFromResourceAsStream()
.
출력
소스 코드 다운로드
$ git clone https://github.com/mkyong/core-java
$ cd java-io
- Files.walk JavaDoc
- CodeSource JavaDoc
- RFC 2396 – URI 구문 및 형식
- Maven – JAR 파일 생성
- Zip 파일 시스템 공급자
- Java Files.walk 예제
- Java – 실행중인 JAR 파일의 경로 가져 오기
mkyong
Mkyong.com의 창립자로서 Java와 오픈 소스를 좋아합니다. Twitter에서 팔로우하세요. 내 튜토리얼이 마음에 들면 이러한 자선 단체에 기부 해보세요.