프로그래밍 방식으로 리소스 디렉터리 경로를 가져 오는 방법
다음과 같은 디렉토리 레이아웃이 있습니다.
- src
- 본관
- 자바
- 자원
- sql (데이터베이스 용 스크립트)
- 봄 (구성)
- 웹앱
ServletContextListener 클래스 내에서 SQL 디렉토리 아래의 파일에 액세스하여 나열하려고합니다. 기본적으로 내 문제는 경로에 있습니다. 왜냐하면 디렉토리 아래에 파일을 나열하는 것은 다음과 같습니다.
File folder = new File(path);
File[] listOfFiles = folder.listFiles();
ServletContextEvent
Object를 사용하여 경로를 만들 수 있습니다.resources/sql
public void contextInitialized(ServletContextEvent event) {
event.getServletContext(); //(getRealPath etc.)
}
상대 경로를 하드 코딩되지 않은 방식으로 설정하는 것이 있습니까? 같은 것 new File("classpath:sql")
(가능하면 봄이 좋습니다) 또는 servletContext로 무엇을 가리켜 야 resources/sql
합니까?
의 내용이 빌드 타임에 .war 내부에 src/main/resources/
복사 되었다고 가정합니다 WEB-INF/classes/
. 이 경우 그냥 할 수 있습니다 (클래스 이름과로드되는 경로의 실제 값으로 대체).
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.Resources 클래스를 사용하십시오 . 예:
URL url = Resources.getResource("file name")
그 후에 .getContent (), .getFile (), .getPath () 등과 같은 메소드가 있습니다.
참고 URL : https://stackoverflow.com/questions/19414453/how-to-get-resources-directory-path-programmatically
'Development Tip' 카테고리의 다른 글
파이썬 matplotlib 그림에서 숫자가 지수 형식으로 변경되는 것을 방지하는 방법 (0) | 2020.11.04 |
---|---|
약속이있는 While 루프 (0) | 2020.11.04 |
Android 레이아웃의 자리 표시 자 텍스트 (디자인 프로세스 전용)? (0) | 2020.11.04 |
php 문자열 연결, 성능 (0) | 2020.11.04 |
Ruby on Rails Routes-get과 match의 차이점 (0) | 2020.11.04 |