csv文件相对xls和xlsx来说,可以用更小的占用空间去存储更多的数据。
分享下java读写csv文件的方法
package csv;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.time.LocalDate;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVFormat.Builder;
import org.apache.commons.csv.CSVPrinter;
import org.apache.commons.csv.CSVRecord;
public class CSVTest {
public static void main(String[] args) throws Exception {
readCSVWithIndex();
System.out.println("============");
readCSVWithName();
System.out.println("============");
writeCSV();
System.out.println("write done!");
}
@SuppressWarnings("resource")
private static void writeCSV() throws Exception{
FileWriter fileWriter = new FileWriter("person.csv");
CSVPrinter csvPrinter = new CSVPrinter(fileWriter, CSVFormat.EXCEL);
csvPrinter.printRecord("id","userName","firstName","lastName","birthday");
csvPrinter.printRecord(1,"john73","John","Doe",LocalDate.of(1973, 9, 15));
csvPrinter.println();
csvPrinter.printRecord(2,"mary","Mary","Meyer",LocalDate.of(1985, 3, 29));
csvPrinter.flush();
csvPrinter.close();
}
@SuppressWarnings("deprecation")
private static void readCSVWithName() throws IOException {
Reader in = new FileReader("score.csv");
Iterable<CSVRecord> records = CSVFormat.DEFAULT.builder().setHeader("Name", "Subject", "Score").build().parse(in);
// Iterable<CSVRecord> records = CSVFormat.RFC4180.withHeader("Name", "Subject", "Score").parse(in);
for (CSVRecord record : records) {
System.out.println(record.get("Subject"));
}
}
private static void readCSVWithIndex() throws IOException {
Reader in = new FileReader("score.csv");
Iterable<CSVRecord> records = CSVFormat.EXCEL.parse(in);
for (CSVRecord record : records) {
// 0代表第一列
System.out.println(record.get(0));
}
}
}