programing

프로그래밍 방식으로 리소스 디렉터리 경로를 가져오는 방법

procenter 2023. 1. 3. 22:33
반응형

프로그래밍 방식으로 리소스 디렉터리 경로를 가져오는 방법

디렉토리 레이아웃은 다음과 같습니다.

  • src
    • 주된
      • 자바
      • 자원.
        • sql(데이터베이스에 추가)
        • 스프링(구성)
      • 웹 앱

Servlet Context Listener 클래스 내에서 SQL 디렉토리의 파일에 액세스하여 목록을 표시합니다.기본적으로 문제가 되는 것은 경로입니다.왜냐하면 디렉토리 아래에 파일이 표시되는 것은 다음과 같기 때문입니다.

File folder = new File(path);
File[] listOfFiles = folder.listFiles();

어쩌면 내가 그...ServletContextEvent경로를 구축하기 위한 개체resources/sql

public void contextInitialized(ServletContextEvent event) {
    event.getServletContext(); //(getRealPath etc.)
}

상대적이고 하드코드되지 않은 방식으로 경로를 설정할 수 있는 무언가가 존재합니까?뭐랄까new File("classpath:sql")(가능한 경우 스프링) 또는 servlet Context를 사용하여 다음을 가리키려면 어떻게 해야 합니까?resources/sql?

의 내용을 추측하고 있습니다.src/main/resources/카피처WEB-INF/classes/빌드 시 .war 안에 있습니다.이 경우(클래스명과 로드되는 경로의 실제 값을 대체)를 실행할 수 있습니다.

URL sqlScriptUrl = MyServletContextListener.class
                       .getClassLoader().getResource("sql/script.sql");

마지막으로 이렇게 했습니다.

private File getFileFromURL() {
    URL url = this.getClass().getClassLoader().getResource("/sql");
    File file = null;
    try {
        file = new File(url.toURI());
    } catch (URISyntaxException e) {
        file = new File(url.getPath());
    } finally {
        return file;
    }
}

...

File folder = getFileFromURL();
File[] listOfFiles = folder.listFiles();
import org.springframework.core.io.ClassPathResource;

...

File folder = new ClassPathResource("sql").getFile();
File[] listOfFiles = folder.listFiles();

이로 인해 도입 옵션이 제한된다는 점에 주의해 주십시오.ClassPathResource.getFile()컨테이너가 전쟁 파일을 폭발(압축 해제)한 경우에만 작동합니다.

com.google.common.io 를 사용해 주세요.자원 클래스예:

 URL url = Resources.getResource("file name")

그 후 .getContent() , .getFile() , .getPath() 등의 메서드를 사용합니다.

언급URL : https://stackoverflow.com/questions/19414453/how-to-get-resources-directory-path-programmatically

반응형