다음으로 Resource가 제공하는 getFile 메서드를 이용해서 File 객체를 얻어와서 사용할 수 있다.(정확히는 있을것 같다. ㅎ)
try (BufferedReader reader = new BufferedReader(new FileReader(fileResource.getFile()))) {
// do something
}
일단은 앞서 밝혔듯이 코드상에서 실행할 때는 잘 동작하지만 이것을 jar 파일로 만들어서 배포하게 되면 getFile()에서 문제가 발생한다.
문제의 원인
문제의 원인은 api를 자세히 살펴보면 답이 있는데..
File org.springframework.core.io.Resource.getFile() throws IOException
Return a File handle for this resource.
Throws:
java.io.FileNotFoundException - if the resource cannot be resolved asabsolute file path,
i.e. if the resource is not available in a file system
IOException - in case of general resolution/reading failuresSee Also:getInputStream()
getFile()은 file system 상(즉 c:/Temp/~~~ 형식이나. ../ 이런 식의 접근)에 있는 파일을 가져올 때 사용하는 것인데 jar에 있는 파일은 그런 식의 접근이 안된다.
대책은?
이에 대한 대책은 바로 InputStream을 끌어와서 사용하면 된다.
try (BufferedReader reader = new BufferedReader(new InputStreamReader(fileResource.getInputStream()))) {
// do something
}