프로젝트에서 사용자 정의 구성 파일을 읽어야 하는 경우가 많습니다. 로컬 개발 도구를 어떻게 작성하든 성공적으로 작성할 수 있지만 서비스에 배포하면 문제가 발생합니다.
예외. BOOT-INF/classes!/config.xml (파일명, 디렉터리 이름이나 볼륨 레이블 구문이 올바르지 않습니다.) 경로에 느낌표가 있습니다.
알고 보니 springboot에서 생성한 jar는 압축된 파일에서는 경로를 읽을 수 있는 방법이 없습니다. 따라서 이 문제를 해결하고 구성 파일을 읽는 원리를 이해하려면 파일 스트림을 직접 얻으면 됩니다.
1. 프로젝트 내 경로를 이용한 읽기는 개발 도구에서만 사용할 수 있으며 배포 후에는 읽을 수 없습니다. (보편적이지 않음)
유사함: src/main/resources/default.xml
File file = new File("src/main/resources/default.xml");
@Test public void testReadFile2() throws IOException { File file = new File("src/main/resources/default.xml"); FileInputStream fis = new FileInputStream(file); InputStreamReader isr = new InputStreamReader(fis); BufferedReader br = new BufferedReader(isr); String data = null; while((data = br.readLine()) != null) { System.out.println(data); } br.close(); isr.close(); fis.close(); }
2. org 사용 .springframework.util.ResourceUtils를 읽어보세요. Linux 환경에서는 읽을 수 없습니다. (보편적이지 않음)
File file = ResourceUtils.getFile("classpath:default.xml");
FileInputStream fis = new FileInputStream(file);
@Test public void testReadFile3() throws IOException { File file = ResourceUtils.getFile("classpath:default.xml"); FileInputStream fis = new FileInputStream(file); InputStreamReader isr = new InputStreamReader(fis); BufferedReader br = new BufferedReader(isr); String data = null; while((data = br.readLine()) != null) { System.out.println(data); } br.close(); isr.close(); fis.close(); }
3을 사용하세요. ClassPathResource는 다양한 환경에서 읽을 수 있습니다. (일반)
Resource 리소스 = new ClassPathResource("resource.properties");
InputStream is = resources.getInputStream();
@Test public void testReadFile() throws IOException { // ClassPathResource classPathResource = new ClassPathResource("default.xml"); Resource resource = new ClassPathResource("default.xml"); InputStream is = resource.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String data = null; while((data = br.readLine()) != null) { System.out.println(data); } br.close(); isr.close(); is.close(); }
4. 스프링 애노테이션과 결합하고 org.springframework.core.io를 사용하세요. .ResourceLoader; 클래스 주석. (일반)
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest public class ApplicationTests { @Autowired ResourceLoader resourceLoader; @Test public void testReaderFile() throws IOException { Resource resource = resourceLoader.getResource("classpath:default.xml"); InputStream is = resource.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String data = null; while((data = br.readLine()) != null) { System.out.println(data); } br.close(); isr.close(); is.close(); } }
위 내용은 springboot가 리소스 아래의 파일을 읽는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!