Backend/리눅스

[리눅스] 우분투 서버에서 spring boot jar 파일 실행 시 java.lang.IllegalArgumentException: URI is not hierarchical, java.io.FileNotFoundException 에러

mirae.kwak 2023. 5. 31. 21:26
728x90

문제

엑셀파일에서 데이터를 가져오기 위해 resources 안에 엑셀 파일을 넣어두고 이를 읽어오는 코드를 작성했었다.

문제가 됐던 코드는 다음과 같다.

URL url = this.getClass().getClassLoader().getResource("test.xlxs");
File f = new File(url.toURI());
FileInputStream file = new FileInputStream(f);
XSSFWorkbook workbook = new XSSFWorkbook(file);
  • resources 경로 상에서 file을 url을 가져와 File 객체를 생성하고 여기서 inputstream을 얻어오는 코드이다.
  • 엑셀 파일 파싱을 위해 XSSFWorkbook을 사용했다.

그 결과 java.lang.IllegalArgumentException: URI is not hierarchical, 에러를 냈다.

 

관련해서 검색을 해봤을 때 URL로 가져오는 것이 아니라 ClassPathResource를 통해 resource를 얻어오는 것이었다. 따라서 다음과 같이 작성을 했었는데 여전히 실패...

File f = new ClassPathResource("test.xlxs").getFile();
FileInputStream file = new FileInputStream(f);
XSSFWorkbook workbook = new XSSFWorkbook(file);

 

결론적으로 java.io.FileNotFoundException 에러를 발생시켰다.

 

 

해결

문제는 resources의 파일에 대해 File 객체로 받아오는 것이 문제였다. 따라서 resource를 file이 아닌 InputStream으로 받아 해결할 수 있었다.

InputStream inputStream = new ClassPathResource(getFilePath(year, semester)).getInputStream();
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);

 

728x90