인프런 커뮤니티 질문&답변

조석훈님의 프로필 이미지
조석훈

작성한 질문수

스프링과 JPA 기반 웹 애플리케이션 개발

지역 정보 추가 삭제 및 테스트

file not found 질문

작성

·

1.5K

1

안녕하세요, Path를 가져오는 부분(resources.getFile()) 에서 자꾸 file not found를 던지는데 왜 그런지 도무지 이해가 가지 않습니다.
csv 파일의 경로는 resources/zone_kr.csv 입니다.
resource import 도 spring.core.io.Resource를 사용했습니다.

답변 2

0

조석훈님의 프로필 이미지
조석훈
질문자

구글링을 통해서 InputStream을 통해 작성해야한다는 부분을 찾았는데 아무래도 제가 잘 사용하지 못했던것같습니다.

그런데 말씀해주신대로 저는 java -jar로 실행하지 않고

메인으로 실행했는데 file not found가 떴었네요.

도움 감사합니다. 

0

백기선님의 프로필 이미지
백기선
지식공유자

실행하실 때 JAR로 패키징해서 java -jar로 실행하셨나요? 그때는 사실 InputStream을 써서 읽어야되요. File을 써서 코딩한건 제 실수입니다. File로 읽을 수 있는건 자바 메인으로 실행했을 때 파일 경로로 읽을 수 있는거고 JAR 안에 들이었는 리소스를 클래스패스로 접근해서 읽을 때는 파일시스템에 있는 파일이 아니라 JAR 안에 있는 파일이라서 getFile()로 읽을 수 없습니다. 다음과 같이 해보세요.

@PostConstruct
public void initZoneData() throws IOException {
if (zoneRepository.count() == 0) {
Resource resource = new ClassPathResource("zones_kr.csv");

InputStream zonesInputStream = resource.getInputStream();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(zonesInputStream)) ) {
List<Zone> zoneList = reader.lines().map(line -> {
String[] split = line.split(",");
return Zone.builder().city(split[0]).localNameOfCity(split[1]).province(split[2]).build();
}).collect(Collectors.toList());

zoneRepository.saveAll(zoneList);
}
}
}
조석훈님의 프로필 이미지
조석훈

작성한 질문수

질문하기