개발/JAVA

[JAVA] BufferedReader 이용하여 csv 파일 읽기 및 map 변환하여 return

반응형

서론

프로젝트를 하면서 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를 적용하여 정리하여 추가 예정

반응형