java如何读取csv
读取CSV文件的方法
Java可以通过多种方式读取CSV文件,以下是几种常见的方法:
使用OpenCSV库
OpenCSV是一个流行的第三方库,专门用于处理CSV文件。需要先添加依赖(Maven):
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.7.1</version>
</dependency>
读取CSV文件的示例代码:

import com.opencsv.CSVReader;
import java.io.FileReader;
import java.io.IOException;
public class CsvReaderExample {
public static void main(String[] args) {
try (CSVReader reader = new CSVReader(new FileReader("data.csv"))) {
String[] nextLine;
while ((nextLine = reader.readNext()) != null) {
for (String cell : nextLine) {
System.out.print(cell + "\t");
}
System.out.println();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用Apache Commons CSV
Apache Commons CSV是另一个强大的库,支持多种CSV格式。添加依赖:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.9.0</version>
</dependency>
读取CSV文件的示例代码:

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class CsvReaderExample {
public static void main(String[] args) {
try (Reader reader = new FileReader("data.csv");
CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT)) {
for (CSVRecord record : csvParser) {
String column1 = record.get(0);
String column2 = record.get(1);
System.out.println(column1 + " | " + column2);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用Java标准库
如果不希望引入第三方库,可以使用Java标准库中的BufferedReader逐行读取CSV文件:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class CsvReaderExample {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new FileReader("data.csv"))) {
String line;
while ((line = br.readLine()) != null) {
String[] values = line.split(",");
for (String value : values) {
System.out.print(value + "\t");
}
System.out.println();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
处理复杂CSV文件
对于包含引号、换行符等复杂内容的CSV文件,建议使用第三方库(如OpenCSV或Apache Commons CSV),因为它们能更好地处理这些情况。例如,OpenCSV可以自动处理字段中的逗号和引号:
CSVReader reader = new CSVReaderBuilder(new FileReader("data.csv"))
.withCSVParser(new CSVParserBuilder()
.withSeparator(',')
.withQuoteChar('"')
.build())
.build();
性能优化
对于大型CSV文件,可以使用流式处理或并行处理以提高性能。Apache Commons CSV支持流式处理:
CSVFormat format = CSVFormat.DEFAULT;
try (Reader reader = new FileReader("large.csv");
CSVParser parser = new CSVParser(reader, format)) {
parser.stream().forEach(record -> {
// 处理每行数据
});
} catch (IOException e) {
e.printStackTrace();
}
以上方法涵盖了从简单到复杂的CSV文件读取需求,可以根据具体场景选择合适的方式。






