반응형
서론
프로젝트를 하면서 csv 파일을 읽어서 데이터를 DB에 저장해달라는 요건이 있어서 정리한다.
추후 화면에서 사용할수 있으므로 데이터를 list해서 return 하는 방법도 정리하였다.
방향
가장 많이 사용하는 BufferedReader 를 이용하여 csv 파일을 읽고 혹시 화면에 데이터를 전달해야 할수 있으므로 List로 변환하여 return data를 준비한다.
소스
package com.example.demo.controller;
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.ApiOperation;
@RestController
public class demoController {
@ApiOperation(value = "csv 읽기")
@GetMapping(value = "/readCsv", produces = "application/json")
public ResponseEntity<?> readCsv(){
// 추후 return 할 데이터 목록
List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();
// return data key 목록
List<String> headerList = new ArrayList<String>();
try{
BufferedReader br = Files.newBufferedReader(Paths.get("D:/test/test.csv"));
String line = "";
while((line = br.readLine()) != null){
List<String> stringList = new ArrayList<String>();
String stringArray[] = line.split(",");
stringList = Arrays.asList(stringArray);
// csv 1열 데이터를 header로 인식
if(headerList.size() == 0){
headerList = stringList;
} else {
Map<String, Object> map = new HashMap<String, Object>();
// header 컬럼 개수를 기준으로 데이터 set
for(int i = 0; i < headerList.size(); i++){
map.put(headerList.get(i), stringList.get(i));
}
mapList.add(map);
}
}
System.out.println(mapList);
} catch (IOException e) {
e.printStackTrace();
}
return new ResponseEntity<>(mapList, HttpStatus.OK);
}
}
확인
1. csv 파일 생성
2. api 호출(postman 이용)
3. return data 확인
정리
csv 파일을 읽고 데이터를 추출하는건 간단했지만 csv 파일 데이터의 적합성과 띄어쓰기 등등 처리해야 할 일이 더 많을 것으로 보인다.
ex) test, 25 를 추출하면 "test", " 25" 로 25 앞에 띄어쓰기가 들어간다.
* 추후 개발시엔 여러가지 validation를 적용하여 정리하여 추가 예정
반응형
'개발 > JAVA' 카테고리의 다른 글
[JAVA] ArrayList 중복 제거 (0) | 2023.12.28 |
---|---|
[JAVA] enum 사용법 정리 (0) | 2023.07.26 |
[JAVA] Swagger 설정 및 오류 해결 (0) | 2023.02.27 |
Spring Boot 파일 용량 설정 (0) | 2023.02.22 |
[JAVA] aop - Aspect 이용하여 모든 controller 공통 적용하기 (0) | 2023.02.20 |