العمل مع CSV في Java: OpenCSV و Apache Commons CSV
CSV (Comma-Separated Values) هو أحد أكثر التنسيقات شيوعًا لتخزين وتبادل البيانات الجدولية. لا تحتوي Java على مكتبة مدمجة للعمل بسهولة مع CSV (فقط تحليل يدوي عبر BufferedReader)، لذلك يستخدم المطورون أدوات خارجية. في هذه المقالة، سنستعرض مكتبتين شائعتين: OpenCSV و Apache Commons CSV. ستتعلم كيفية قراءة وكتابة ومعالجة ملفات CSV مع أمثلة الكود.
1. OpenCSV: تحليل خفيف وتعليقات توضيحية
OpenCSV هي مكتبة بسيطة وفعالة للعمل مع CSV. تدعم القراءة سطرًا بسطر، والتخطيط على كائنات Java (عبر التعليقات التوضيحية @CsvBindByName)، بالإضافة إلى كتابة البيانات.
الإضافة (Maven)
<dependency> <groupId>com.opencsv</groupId> <artifactId>opencsv</artifactId> <version>5.9</version></dependency>قراءة CSV إلى قائمة من السلاسل النصية
import com.opencsv.CSVReader;import java.io.FileReader;import java.util.List;
public class OpenCsvExample { public static void main(String[] args) throws Exception { try (CSVReader reader = new CSVReader(new FileReader("data.csv"))) { List<String[]> rows = reader.readAll(); for (String[] row : rows) { System.out.println(String.join(" | ", row)); } } }}التخطيط على كائن Java
import com.opencsv.bean.CsvBindByName;import com.opencsv.bean.CsvToBean;import com.opencsv.bean.CsvToBeanBuilder;import java.io.FileReader;import java.util.List;
public class User { @CsvBindByName(column = "name") private String name;
@CsvBindByName(column = "email") private String email;
// getters and setters}
// القراءةtry (FileReader reader = new FileReader("users.csv")) { CsvToBean<User> csvToBean = new CsvToBeanBuilder<User>(reader) .withType(User.class) .withIgnoreLeadingWhiteSpace(true) .build(); List<User> users = csvToBean.parse(); users.forEach(u -> System.out.println(u.getName() + " - " + u.getEmail()));}كتابة CSV
import com.opencsv.CSVWriter;import java.io.FileWriter;
try (CSVWriter writer = new CSVWriter(new FileWriter("output.csv"))) { String[] header = {"Name", "Age", "City"}; writer.writeNext(header); writer.writeNext(new String[]{"Alice", "30", "Moscow"}); writer.writeNext(new String[]{"Bob", "25", "SPb"});}2. Apache Commons CSV: المرونة والأداء
Apache Commons CSV هي جزء من نظام Apache Commons البيئي. تتميز بأداء عالٍ، ودعم تنسيقات مختلفة (CSV, TSV, Excel)، ومحددات قابلة للتخصيص.
الإضافة (Maven)
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-csv</artifactId> <version>1.11.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.Reader;
try (Reader in = new FileReader("data.csv"); CSVParser parser = CSVFormat.DEFAULT .withFirstRecordAsHeader() .parse(in)) { for (CSVRecord record : parser) { String name = record.get("name"); String email = record.get("email"); System.out.println(name + " : " + email); }}كتابة CSV بمحدد مخصص
import org.apache.commons.csv.CSVFormat;import org.apache.commons.csv.CSVPrinter;import java.io.FileWriter;import