[SPRING] 스프링 부트의 리소스 폴더에서 파일 읽기
SPRING스프링 부트의 리소스 폴더에서 파일 읽기
저는 Spring Boot와 json-schema-validator를 사용하고 있습니다. 리소스 폴더에서 jsonschema.json이라는 파일을 읽으려고합니다. 몇 가지 방법을 시도했지만 작동시키지 못합니다. 이것은 내 코드입니다.
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("jsonschema.json").getFile());
JsonNode mySchema = JsonLoader.fromFile(file);
이것은 파일의 위치입니다.
그리고 여기에 클래스 폴더에있는 파일을 볼 수 있습니다.
하지만 코드를 실행할 때 다음 오류가 발생합니다.
jsonSchemaValidator error: java.io.FileNotFoundException: /home/user/Dev/Java/Java%20Programs/SystemRoutines/target/classes/jsonschema.json (No such file or directory)
내 코드에서 내가 뭘 잘못하고 있니?
해결법
-
==============================
1.이 문제를 해결하기 위해 많은 시간을 보낸 후 마침내 작동하는 솔루션을 발견했습니다. 이 솔루션은 Spring의 ResourceUtils를 사용합니다. json 파일에서도 작동해야합니다.
이 문제를 해결하기 위해 많은 시간을 보낸 후 마침내 작동하는 솔루션을 발견했습니다. 이 솔루션은 Spring의 ResourceUtils를 사용합니다. json 파일에서도 작동해야합니다.
Lokesh Gupta의 잘 쓰여진 페이지 주셔서 감사합니다 : Blog
package utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.ResourceUtils; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import java.io.File; public class Utils { private static final Logger LOGGER = LoggerFactory.getLogger(Utils.class.getName()); public static Properties fetchProperties(){ Properties properties = new Properties(); try { File file = ResourceUtils.getFile("classpath:application.properties"); InputStream in = new FileInputStream(file); properties.load(in); } catch (IOException e) { LOGGER.error(e.getMessage()); } return properties; } }
-
==============================
2.매우 짧은 대답 : 당신은 클래스를 목표로하지 않고 특정 클래스 로더의 범위에서 속성을 찾고 있습니다. 이것은 작동해야합니다 :
매우 짧은 대답 : 당신은 클래스를 목표로하지 않고 특정 클래스 로더의 범위에서 속성을 찾고 있습니다. 이것은 작동해야합니다 :
File file = new File(getClass().getResource("jsonschema.json").getFile()); JsonNode mySchema = JsonLoader.fromFile(file);
또한, 이것을보십시오 :
추신 프로젝트가 한 컴퓨터에서 컴파일 된 후 다른 프로젝트에서 실행되거나 Docker에서 앱을 실행하면 문제가 발생할 수 있습니다. 이 경우 리소스 폴더의 경로가 잘못 될 수 있습니다. 이 경우 런타임시 리소스에 대한 경로를 확인하는 것이 좋습니다.
ClassPathResource res = new ClassPathResource("jsonschema.json"); File file = new File(res.getPath()); JsonNode mySchema = JsonLoader.fromFile(file);
-
==============================
3.예를 들어 리소스 폴더 아래에 config 폴더가 있다면 나는이 클래스를 사용하여 완벽하게 작동하도록 노력했다.
예를 들어 리소스 폴더 아래에 config 폴더가 있다면 나는이 클래스를 사용하여 완벽하게 작동하도록 노력했다.
File file = ResourceUtils.getFile("classpath:config/sample.txt") //Read File Content String content = new String(Files.readAllBytes(file.toPath())); System.out.println(content);
-
==============================
4.하위 폴더로 리소스에 json 폴더를 만든 다음 json 파일을 폴더에 추가 한 다음이 코드를 사용할 수 있습니다.
하위 폴더로 리소스에 json 폴더를 만든 다음 json 파일을 폴더에 추가 한 다음이 코드를 사용할 수 있습니다.
import com.fasterxml.jackson.core.type.TypeReference;
InputStream is = TypeReference.class.getResourceAsStream ( "/ json / fcmgoogletoken.json");
Docker에서 작동합니다.
-
==============================
5.여기 내 해결책이있다. 누군가를 도울 수있다.
여기 내 해결책이있다. 누군가를 도울 수있다.
그것은 InputStream을 반환하지만 당신도 그것을 읽을 수 있다고 가정합니다.
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("jsonschema.json");
-
==============================
6.같은 문제에 갇혀 이것이 나에게 도움이된다.
같은 문제에 갇혀 이것이 나에게 도움이된다.
URL resource = getClass().getClassLoader().getResource("jsonschema.json"); JsonNode jsonNode = JsonLoader.fromURL(resource);
from https://stackoverflow.com/questions/44399422/read-file-from-resources-folder-in-spring-boot by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Google App Engine - org.datanucleus.exceptions.NucleusUserException : 객체 관리자가 닫혔습니다. (0) | 2019.05.09 |
---|---|
[SPRING] JAX WS webservice는 applicationcontext에서 스프링 빈을 가져 가지 않으므로 null 포인터 예외가 발생합니다. (0) | 2019.05.09 |
[SPRING] 일치하는 팩토리 메소드가 없습니다. factory 메소드 'aspectOf ()' (0) | 2019.05.09 |
[SPRING] 업로드 파일 반환 403 오류 - 봄 MVC (0) | 2019.05.09 |
[SPRING] Spring 보안 역할에 기반한 Jackson @JsonIgnore 필드 (0) | 2019.05.09 |