العمل مع CSV في Kotlin: نظرة عامة على المكتبات وأمثلة عملية
CSV (Comma-Separated Values) هو أحد أكثر التنسيقات شيوعًا لتبادل البيانات الجدولية. في Kotlin، كما في Java، توجد عدة مكتبات ناضجة للعمل مع CSV. في هذه المقالة، سنستعرض ثلاثة طرق رئيسية: مكتبة kotlin-csv الخفيفة، وOpenCSV القوي، وApache Commons CSV الكلاسيكي. ستتعلم كيفية قراءة وكتابة ومعالجة ملفات CSV بأقل جهد.
1. مكتبة kotlin-csv (الخيار الموصى به)
kotlin-csv هي مكتبة Kotlin أصلية، مكتوبة بالكامل بلغة Kotlin دون اعتماد على مكتبات Java. وهي مثالية للمشاريع الحديثة بلغة Kotlin.
الإضافة (Gradle)
dependencies { implementation("com.github.doyaaaaaken:kotlin-csv-jvm:1.9.3")}قراءة CSV
import com.github.doyaaaaaken.kotlincsv.dsl.csvReader
fun main() { val csvData = """ name,age,city Alice,30,New York Bob,25,London Charlie,35,Tokyo """.trimIndent()
val rows: List<List<String>> = csvReader().readAll(csvData) rows.forEach { row -> println("${row[0]} — ${row[1]} سنة، ${row[2]}") }}كتابة CSV
import com.github.doyaaaaaken.kotlincsv.dsl.csvWriter
fun main() { val data = listOf( listOf("product", "price", "quantity"), listOf("Laptop", "1200", "5"), listOf("Mouse", "25", "50") ) csvWriter().open("inventory.csv") { writeRows(data) } println("تم إنشاء الملف inventory.csv")}2. OpenCSV — مكتبة Java موثوقة
OpenCSV هي واحدة من أشهر مكتبات Java للعمل مع CSV. تعمل بشكل ممتاز في Kotlin بفضل التوافق الكامل.
الإضافة (Gradle)
dependencies { implementation("com.opencsv:opencsv:5.9")}القراءة مع تعيين البيانات إلى كلاس
import com.opencsv.bean.CsvToBeanBuilderimport java.io.FileReader
data class Person( @field:com.opencsv.bean.CsvBindByName(column = "name") val name: String, @field:com.opencsv.bean.CsvBindByName(column = "age") val age: Int, @field:com.opencsv.bean.CsvBindByName(column = "city") val city: String)
fun main() { val beans = CsvToBeanBuilder<Person>(FileReader("people.csv")) .withType(Person::class.java) .build() .parse()
beans.forEach { println("${it.name} (${it.age}) — ${it.city}") }}كتابة الكائنات
import com.opencsv.bean.StatefulBeanToCsvimport com.opencsv.bean.StatefulBeanToCsvBuilderimport java.io.FileWriter
fun main() { val people = listOf( Person("Alice", 30, "New York"), Person("Bob", 25, "London") ) val writer = FileWriter("output.csv") val beanToCsv: StatefulBeanToCsv<Person> = StatefulBeanToCsvBuilder(writer).build() beanToCsv.write(people) writer.close() println("تم")}3. Apache Commons CSV — المعيار الصناعي
مكتبة من مؤسسة Apache Foundation، تدعم تنسيقات CSV مختلفة (Excel، MySQL، RFC 4180).
الإضافة (Gradle)
dependencies { implementation("org.apache.commons:commons-csv:1.11.0")}القراءة مع العناوين
import org.apache.commons.csv.CSVFormatimport org.apache.commons.csv.CSVParserimport java.io.FileReader
fun main() { val parser = CSVParser.parse( FileReader("data.csv"), CSVFormat.DEFAULT.withFirstRecordAsHeader() ) parser.forEach { record -> val name = record["name"] val age = record["age"] println("$name, العمر $age") }}