logo

OpenCSV를 사용하여 Java에서 CSV 파일 읽기

쉼표로 구분된 값(CSV) 파일은 일반 일반 텍스트 파일로, 데이터를 열별로 저장하고 구분 기호로 구분합니다(예: 일반적으로 쉼표 , ).

OpenCSV는 Java용 CSV 파서 라이브러리입니다. OpenCSV는 수행하려는 모든 기본 CSV 유형 작업을 지원합니다. Java 7은 현재 OpenCSV에 대해 지원되는 최소 버전입니다. Java 언어는 CSV 파일을 효과적으로 처리하기 위한 기본 지원을 제공하지 않으므로 Java에서 CSV 파일을 처리하기 위해 OpenCSV를 사용하고 있습니다.



OpenCSV를 사용하는 방법

1. Maven 프로젝트의 경우 pom.xml 파일에 OpenCSV Maven 종속성을 포함할 수 있습니다.

HTML








여우 또는 늑대

<>dependency>>> ><>groupId>>com.opencsvgroupId> opencsvartifactId>4.1버전> 종속성>>

>

>

2. Gradle 프로젝트의 경우 OpenCSV 종속성을 포함할 수 있습니다.

compile group: 'com.opencsv', name: 'opencsv', version: '4.1'>

3. 다운로드할 수 있습니다 OpenCSV 항아리 프로젝트 클래스 경로에 포함시킵니다.

opencsv의 유용한 클래스

    CSVReader – 이 클래스는 CSV 파일을 문자열 배열 목록으로 읽는 작업을 제공합니다. CSVWriter – 이 클래스를 사용하면 데이터를 CSV 파일에 쓸 수 있습니다. CsvToBean – 이 클래스는 CSV 파일 콘텐츠에서 Java Bean을 채우려는 경우에 사용됩니다. BeanToCsv – 이 클래스는 Java 애플리케이션에서 데이터를 CSV 파일로 내보내는 데 도움이 됩니다.

CSV 파일 읽기

CSV 파일을 읽으려면 CSVReader 클래스가 필요합니다. 다음은 우리가 읽을 샘플 CSV 파일입니다.

Java에서 문자열을 int로 변환
name, rollno, department, result, cgpa amar, 42, cse, pass, 8.6 rohini, 21, ece, fail, 3.2 aman, 23, cse, pass, 8.9 rahul, 45, ee, fail, 4.6 pratik, 65, cse, pass, 7.2 raunak, 23, me, pass, 9.1 suvam, 68, me, pass, 8.2>

두 가지 방법으로 csv 파일을 읽을 수 있습니다.

1. 데이터를 한 줄씩 읽습니다. CSV 파일을 한 줄씩 읽는 방법을 살펴보겠습니다. 데이터를 한 줄씩 읽으려면 먼저 CSV 파일의 filereader 개체를 전달하여 CSVReader 개체를 구성하고 초기화해야 합니다. 그런 다음 아래 코드와 같이 CSVReader 개체의 readNext() 메서드를 호출하여 데이터를 한 줄씩 읽어야 합니다.

자바




// Java code to illustrate reading a> // CSV file line by line> public> static> void> readDataLineByLine(String file)> {> > >try> {> > >// Create an object of filereader> >// class with CSV file as a parameter.> >FileReader filereader =>new> FileReader(file);> > >// create csvReader object passing> >// file reader as a parameter> >CSVReader csvReader =>new> CSVReader(filereader);> >String[] nextRecord;> > >// we are going to read data line by line> >while> ((nextRecord = csvReader.readNext()) !=>null>) {> >for> (String cell : nextRecord) {> >System.out.print(cell +>' '>);> >}> >System.out.println();> >}> >}> >catch> (Exception e) {> >e.printStackTrace();> >}> }>

>

김프의 글꼴 목록

>

2. 모든 데이터를 한 번에 읽습니다. readNext() 메소드를 사용하여 CSV 레코드를 하나씩 읽습니다. CSVReader는 또한 모든 레코드를 한 번에 목록으로 읽어들이는 readAll()이라는 메서드를 제공합니다.

 List allData = csvReader.readAll();>

위 코드의 출력에 표시된 것처럼 기본적으로 csv 파일을 읽을 때 헤더는 무시되지 않습니다. 목록의 첫 번째 요소를 건너뛰어야 하는 경우 CSVReader를 생성하는 동안 시작 줄을 지정할 수 있습니다.

CSVReader csvReader = new CSVReaderBuilder(reader).withSkipLines(1).build();>

암호:

자바




// Java code to illustrate reading a> // all data at once> public> static> void> readAllDataAtOnce(String file)> {> >try> {> >// Create an object of file reader> >// class with CSV file as a parameter.> >FileReader filereader =>new> FileReader(file);> > >// create csvReader object and skip first Line> >CSVReader csvReader =>new> CSVReaderBuilder(filereader)> >.withSkipLines(>1>)> >.build();> >List allData = csvReader.readAll();> > >// print Data> >for> (String[] row : allData) {> >for> (String cell : row) {> >System.out.print(cell +>' '>);> >}> >System.out.println();> >}> >}> >catch> (Exception e) {> >e.printStackTrace();> >}> }>

>

>

구분 기호가 다른 CSV 파일 읽기

CSV 파일은 쉼표 이외의 구분 기호로 구분할 수 있습니다. 세미콜론, 파이프 등. 다음 예는 세미콜론 문자로 구분된 CSV 파일의 데이터를 읽는 방법을 보여줍니다.

세미콜론으로 구분된 CSV 파일 예:

name;rollno;department;result;cgpa amar;42;cse;pass;8.6 rohini;21;ece;fail;3.2 aman;23;cse;pass;8.9 rahul;45;ee;fail;4.6 pratik;65;cse;pass;7.2 raunak;23;me;pass;9.1 suvam;68;me;pass;8.2>

사용자 정의 구분 기호의 경우 먼저 특정 파서 문자가 있는 CSVParser가 생성됩니다.

CSVParser parser = new CSVParserBuilder().withSeparator(';').build();>

그런 다음 생성자와 함께 CSVReader() 메소드를 사용하여 CSVReader 객체를 생성하고 생성된 파서 객체를 withCSVParser 메소드의 매개변수에 제공합니다. 마지막으로 빌드 메소드를 호출하여 객체를 빌드합니다.

CSVReader csvReader = new CSVReaderBuilder(filereader).withCSVParser(parser).build();>

암호:

자바




버블 정렬 자바

// Java code to illustrate> // Reading CSV File with different separator> public> static> void> readDataFromCustomSeparator(String file)> {> >try> {> >// Create an object of file reader class with CSV file as a parameter.> >FileReader filereader =>new> FileReader(file);> > >// create csvParser object with> >// custom separator semi-colon> >CSVParser parser =>new> CSVParserBuilder().withSeparator(>';'>).build();> > >// create csvReader object with parameter> >// filereader and parser> >CSVReader csvReader =>new> CSVReaderBuilder(filereader)> >.withCSVParser(parser)> >.build();> > >// Read all data at once> >List allData = csvReader.readAll();> > >// Print Data.> >for> (String[] row : allData) {> >for> (String cell : row) {> >System.out.print(cell +>' '>);> >}> >System.out.println();> >}> >}> >catch> (Exception e) {> >e.printStackTrace();> >}> }>

>

SDLC 수명주기
>

예 - 두 개의 csv 파일 result.csv 및 results_semicolon_Separator.csv 읽기
result.csv에는 기본 구분 기호 ','가 있지만 results_semicolon_Separator.csv에는 ', ' 대신 구분 기호 ';'가 있습니다.

코드:

자바




// Java program to illustrate reading> // two CSV files> // with different separators> > import> java.io.FileReader;> import> java.util.List;> import> com.opencsv.*;> > public> class> ReadCSVData {> >private> static> final> String CSV_FILE_PATH> >=>'D:EclipseWorkSpaceCSVOperations esults.csv'>;> >private> static> final> String CSV_FILE_CUSTOM_SEPARATOR> >=>'D:EclipseWorkSpaceCSVOperations esults_semicolon_Separator.csv'>;> > >public> static> void> main(String[] args)> >{> > >System.out.println(>'Read Data Line by Line With Header '>);> >readDataLineByLine(CSV_FILE_PATH);> >System.out.println(>'_______________________________________________'>);> > >System.out.println(>'Read All Data at Once and Hide the Header also '>);> >readAllDataAtOnce(CSV_FILE_PATH);> >System.out.println(>'_______________________________________________'>);> > >System.out.println(>'Custom Separator here semi-colon '>);> >readDataFromCustomSeparator(CSV_FILE_CUSTOM_SEPARATOR);> >System.out.println(>'_______________________________________________'>);> >}> > >public> static> void> readDataLineByLine(String file)> >{> > >try> {> > >// Create an object of filereader class> >// with CSV file as a parameter.> >FileReader filereader =>new> FileReader(file);> > >// create csvReader object passing> >// filereader as parameter> >CSVReader csvReader =>new> CSVReader(filereader);> >String[] nextRecord;> > >// we are going to read data line by line> >while> ((nextRecord = csvReader.readNext()) !=>null>) {> >for> (String cell : nextRecord) {> >System.out.print(cell +>' '>);> >}> >System.out.println();> >}> >}> >catch> (Exception e) {> >e.printStackTrace();> >}> >}> > >public> static> void> readAllDataAtOnce(String file)> >{> >try> {> > >// Create an object of filereader class> >// with CSV file as a parameter.> >FileReader filereader =>new> FileReader(file);> > >// create csvReader object> >// and skip first Line> >CSVReader csvReader =>new> CSVReaderBuilder(filereader)> >.withSkipLines(>1>)> >.build();> >List allData = csvReader.readAll();> > >// print Data> >for> (String[] row : allData) {> >for> (String cell : row) {> >System.out.print(cell +>' '>);> >}> >System.out.println();> >}> >}> >catch> (Exception e) {> >e.printStackTrace();> >}> >}> > >public> static> void> readDataFromCustomSeparator(String file)> >{> >try> {> >// Create object of filereader> >// class with csv file as parameter.> >FileReader filereader =>new> FileReader(file);> > >// create csvParser object with> >// custom separator semi-colon> >CSVParser parser =>new> CSVParserBuilder().withSeparator(>';'>).build();> > >// create csvReader object with> >// parameter filereader and parser> >CSVReader csvReader =>new> CSVReaderBuilder(filereader)> >.withCSVParser(parser)> >.build();> > >// Read all data at once> >List allData = csvReader.readAll();> > >// print Data> >for> (String[] row : allData) {> >for> (String cell : row) {> >System.out.print(cell +>' '>);> >}> >System.out.println();> >}> >}> >catch> (Exception e) {> >e.printStackTrace();> >}> >}> }>

>

>

산출:

_______________________________________________ Read Data Line by Line With Header name rollno department result cgpa amar 42 cse pass 8.6 rohini 21 ece fail 3.2 aman 23 cse pass 8.9 rahul 45 ee fail 4.6 pratik 65 cse pass 7.2 raunak 23 me pass 9.1 suvam 68 me pass 8.2 _______________________________________________ Read All Data at Once and Hide the Header also amar 42 cse pass 8.6 rohini 21 ece fail 3.2 aman 23 cse pass 8.9 rahul 45 ee fail 4.6 pratik 65 cse pass 7.2 raunak 23 me pass 9.1 suvam 68 me pass 8.2 _______________________________________________ Custom Separator here semi-colon name rollno department result cgpa amar 42 cse pass 8.6 rohini 21 ece fail 3.2 aman 23 cse pass 8.9 rahul 45 ee fail 4.6 pratik 65 cse pass 7.2 raunak 23 me pass 9.1 suvam 68 me pass 8.2 _______________________________________________>

향후 기사에서는 OpenCSV를 사용하여 CSV 파일에 대한 더 많은 작업을 포함할 것입니다.
참고자료: CSVReader 클래스 문서 , OpenCSV 문서