>  기사  >  Java  >  springboot가 리소스 아래의 파일을 읽는 방법

springboot가 리소스 아래의 파일을 읽는 방법

PHPz
PHPz앞으로
2023-05-12 11:46:152681검색

프로젝트에서 사용자 정의 구성 파일을 읽어야 하는 경우가 많습니다. 로컬 개발 도구를 어떻게 작성하든 성공적으로 작성할 수 있지만 서비스에 배포하면 문제가 발생합니다.

예외. BOOT-INF/classes!/config.xml (파일명, 디렉터리 이름이나 볼륨 레이블 구문이 올바르지 않습니다.) 경로에 느낌표가 있습니다.

알고 보니 springboot에서 생성한 jar는 압축된 파일에서는 경로를 읽을 수 있는 방법이 없습니다. 따라서 이 문제를 해결하고 구성 파일을 읽는 원리를 이해하려면 파일 스트림을 직접 얻으면 됩니다.

springboot가 리소스 아래의 파일을 읽는 방법

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제