العمل مع CSV في Java: نظرة عامة على المكتبات وأمثلة
CSV (قيم مفصولة بفواصل) هو أحد أكثر التنسيقات شيوعًا لتبادل البيانات الجدولية. على الرغم من بساطته الظاهرية، فإن التحليل اليدوي لـ CSV في Java قد يؤدي إلى أخطاء بسبب هروب علامات الاقتباس والفواصل المتداخلة وترميزات مختلفة. في هذه المقالة، سنستعرض ثلاثة أساليب رئيسية: استخدام OpenCSV وApache Commons CSV وjava.util.Scanner القياسي.
1. OpenCSV — مكتبة مرنة وشائعة
OpenCSV هي مكتبة خفيفة مفتوحة المصدر تدعم قراءة وكتابة CSV وTSV والمحددات الأخرى. تقوم تلقائيًا بمعالجة الهروب وعلامات الاقتباس والحقول متعددة الأسطر.
الإضافة (Maven)
<dependency> <groupId>com.opencsv</groupId> <artifactId>opencsv</artifactId> <version>5.9</version></dependency>مثال: قراءة CSV إلى قائمة كائنات
import com.opencsv.CSVReader;import com.opencsv.bean.CsvToBean;import com.opencsv.bean.HeaderColumnNameMappingStrategy;import java.io.FileReader;import java.util.List;
public class OpenCSVExample { public static void main(String[] args) throws Exception { try (FileReader reader = new FileReader("users.csv")) { // تحليل يدوي CSVReader csvReader = new CSVReader(reader); String[] line; while ((line = csvReader.readNext()) != null) { System.out.println("الاسم: " + line[0] + ", البريد الإلكتروني: " + line[1]); } } }}مثال: ربط بـ Java Bean
public class User { private String name; private String email; // دوال الحصول والتعيين}
// قراءة مع الربطtry (FileReader reader = new FileReader("users.csv")) { HeaderColumnNameMappingStrategy<User> strategy = new HeaderColumnNameMappingStrategy<>(); strategy.setType(User.class);
CsvToBean<User> csvToBean = new CsvToBeanBuilder<User>(reader) .withMappingStrategy(strategy) .build();
List<User> users = csvToBean.parse();}2. Apache Commons CSV — المعيار من Apache
Apache Commons CSV — جزء من نظام Apache Commons البيئي. يوفر تنسيقات جاهزة (RFC 4180، Excel، MySQL) ومعالجة تدفقية.
الإضافة (Maven)
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-csv</artifactId> <version>1.11.0</version></dependency>مثال: قراءة مع رؤوس الأعمدة
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;
public class CommonsCSVExample { public static void main(String[] args) throws Exception { try (Reader reader = new FileReader("data.csv"); CSVParser parser = CSVFormat.DEFAULT .withFirstRecordAsHeader() .parse(reader)) {
for (CSVRecord record : parser) { String id = record.get("ID"); String value = record.get("Value"); System.out.println(id + " -> " + value); } } }}كتابة CSV
import org.apache.commons.csv.CSVFormat;import org.apache.commons.csv.CSVPrinter;import java.io.FileWriter;import java.io.Writer;
try (Writer writer = new FileWriter("output.csv"); CSVPrinter printer = CSVFormat.DEFAULT .withHeader("Name", "Age") .print(writer)) {
printer.printRecord("Alice", 30); printer.printRecord("Bob", 25);}
أيضاً في المكتبة
توصيات