fileInputStream으로 구성 XML 파일을로드하는 방법이지만 filenotFoundException을 얻는 방법

StackOverflow https://stackoverflow.com/questions/2211991

문제

Eclipse의 빌드 경로는 다음과 같습니다.

ProjectName
   -- WEB-INF
      -- classes
         -- myClass.class
      -- configs
         -- myConfig.xml

구성에 대한 내 절대 경로는 현재 다음과 같습니다.

C : Development Java ProjectName Web-Inf configs myconfig.xml

바인딩에 JAXB를 사용하고 있으며 FileInputStream을 기대하고 있습니다. FileInputStream은 XML 구성 파일의 스트림이어야합니다. 그러나 구성을 위해 FileInputStream을 얻는 방법을 알 수 없으며 FilEnotFoundException을 계속 얻습니다.

프로젝트 오픈 소스를 공개 할 계획이므로 누군가가 구성 경로를 하드 코딩 할 필요가없는 방식 으로이 구성을로드하기를 원합니다. 누군가가 완전한 절대 경로를 하드 코딩하는 많은 예가 있지만, 더 유연한 "이"와 같은 것입니다.

새 fileInputStream ( "/web-inf/configs/myconfig.xml");

감사!

도움이 되었습니까?

해결책

MyConfig.xml을 Web-Inf/Classes 디렉토리에 대신 대신 배치하고 클래스 경로에 있기 때문에 클래스 로더를 통해로드하는 것이 좋습니다. 서블릿 컨텍스트에서 getResourCeasStream ()을 호출하면 사용할 수있는 입력 스트림을 반환합니다. 그것은 컨텍스트 루트와 관련이 있으므로, 당신은 그 전쟁을 선택하여 어디에나 넣을 수 있습니다. 코드는 여전히 작동합니다.

다른 팁

Web-Inf에서 상대적으로 상대적인 경로의 입력 스트림을 얻을 수 있습니다. ServletContext.getResourceAsStream() 방법 (Javadoc 여기) 및 그 변형.

예를 들어, selvlet 코드에서 다음을 수행 할 수 있습니다.

getServletContext().getResourceAsStream("/WEB-INF/configs/myConfig.xml") // your file
getServletContext().getResource("/WEB-INF") // URL to WEB-INF dir
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top