관리 메뉴

피터의 개발이야기

[JAVA] CSV 파일 만들기 본문

Programming/JAVA

[JAVA] CSV 파일 만들기

기록하는 백앤드개발자 2021. 1. 14. 08:00
반응형

백업데이터를 생성할 때에 CSV파일을 생성할 일이 많이 있습니다.

CSV 파일 생성 방법에 대해 정리를 하였습니다.

 

 

gradle

compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.11.4'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: '2.11.4'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.11.4'
compile group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-csv', version: '2.11.4'

 

 

CSVUtil.java

import com.fasterxml.jackson.databind.ObjectWriter;
import com.fasterxml.jackson.dataformat.csv.CsvGenerator;
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;
import org.springframework.stereotype.Component;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.List;

@Component
public class CSVUtil {

    // makeCsvFile
    public void makeCsvFile(Class<?> clazz, File csvFile, List<?> dataList) {
        try {
            CsvMapper csvMapper = new CsvMapper();
            CsvSchema csvSchema =
                    csvMapper.enable(CsvGenerator.Feature.ALWAYS_QUOTE_STRINGS)
                            .schemaFor(clazz)   // CSV 파일로 생성할 자바 객체의 클래스 정보
                            .withHeader()       // CSV 헤더 사용 여부
                            .withColumnSeparator(',')   // 컬럼 간 구분자
                            .withLineSeparator("\n");   // 개행

            ObjectWriter writer = csvMapper.writer(csvSchema);
            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(csvFile), "UTF-8");
            writer.writeValues(outputStreamWriter).writeAll(dataList);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

 

ExportVO

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class ExportVO {
    private String conversationId;
    private String talk;

    public ExportVO(String conversationId, String talk) {
        this.conversationId = conversationId;
        this.talk = talk;
    }
}

VO에 담겨 있는 객체는 CSV해더들의 컴럼이 된다.

 

makeCSVfile.java

public class CSVFileMakeTest {

    @Test
    public void makeCSVfile(){
        // 파일의 내용
        ExportVO exportVO = new ExportVO("conversationId","talkText");

        // 파일의 row생성
        List<ExportVO> list = new ArrayList<>();
        list.add(exportVO);

        // 저장할 CSV파일 객체
        File csvFile = new File("test.csv");

        CSVUtil csvUtil = new CSVUtil();
        csvUtil.makeCsvFile(ExportVO.class, csvFile, list);

    }
}

 

 

생성된 파일

"conversationId","talk"
"conversationId","talkText"

 

소스는 여기 있습니다.

반응형
Comments