آموزش خواندن و پردازش فایل CSV در جاوا

در این آموزش می خواهیم نحوه خواندن و پردازش فیلدها و خطوط یک فایل CSV در جاوا و به روش های مختلف را بررسی کنیم.

فایل با فرمت CSV چیست؟

یک فایل CSV یک فایل متنی ساده که در واقع داده ها را به شکل سطر و ستون های یک جدول ذخیره کرده می کند که جداکننده هر ستون  یا همان فیلد، یک کاما (کاراکتر , ) است.

گاهی ستون ها با tab هم جدا می شوند اما این شیوه معمول نیست. و بدیهی است که هر سطر جدول هم با کاراکتر انتهای خط یا همان کاراکتر خط جدید، از سطر دیگر جدا شده است.

فایل های CSV برای انتقال اطلاعات بین دستگاه های روی شبکه و خروجی و پشتیبان گرفتن از سیستم ها بسیار معمول و پر استفاده هستند.

در این مطلب ما به سراغ شیوه های مختلفی برای خواندن و پردازش یک فایل CSV می رویم و هر کدام را بررسی می کنیم. ابتدا مثالی از محتوای یک فایل ساده CSV را نشان می دهیم که مقادیر هر خط آن با کاراکتر , جدا شده اند و در ادامه آموزش از آن استفاده خواهیم کرد.

نام این فایل users.csv است.

خواندن فایل CSV بدون کتابخانه اضافی در جاوا

برای خواندن و پردازش یک فایل ساده CSV که داخل خود فیلدها کامای اضافی ندارد و کاما تنها در نقش جداکننده به کار رفته (مثل فایلی که بالاتر نشان دادیم)، کلاس های استاندارد جاوا کافی هستند.

شما می توانید یا از کلاس BufferedReader استفاده کنید و یا از کلاس Scanner که به سادگی فایلی را از جاوا بخوانید.

کلاس BufferedReader

از آنجا که CSV یک فایل متنی ساده است، می توان کلاس BufferedReader را برای خواندن خط به خط آن به کار برد. سپس می توانید با بهره گیری از تابع split از کلاس String هر خط خوانده شده را با مشخص کاما به عنوان جداکننده، به بخش های مختلف تقسیم کنید. به این ترتیب مقادیر ستون ها و فیلدهای مختلف به دست می آیند.

به مثال زیر دقت کنید:

به این وسیله، خروجی به شکل زیر حاصل می شود:

 

کلاس Scanner

راهی دیگر برای خواندن و پردازش یک فایل CSV استفاده از کلاس Scanner است. این کلاس قابلیت جداسازی خط خوانده شده با جداکننده مشخص شده را دارد. در واقع این کلاس می تواند حتی الگویی پیچیده در قالب عبارات باقاعده را دریافت کند و برای جداسازی و ساخت توکن استفاده کند. سپس می تواند مقادیر جداشده را به نوع داده های متفاوتی هم تبدیل کند. مثلا با فراخوان تابع nextInt از این کلاس، مقدار خوانده و جدا شده را به عدد صحیح تبدیل می کند.

اینجا یک مثال داریم که شیوه به کارگیری کلاس Scanner برای خواندن مقادیر فایل CSV را نشان می دهد:

از کد بالا خروجی زیر روی کنسول حاصل می شود:

 

خواندن فایل CSV با کتابخانه OpenCSV

OpenCSV یک کتابخانه محبوب برای خواندن، نوشتن و پردازش فایل های CSV در جاوا است. این کتابخانه انتخابی عالی برای مواقعی است که با انواع مختلفی از جداکننده ها و کاراکترهای خاص سر و کار دارید.

برای اضافه کردن امکان پشتیبانی از OpenCSV در پروژه Gradle خود، موارد اعلام وابستگی زیر را در فایل build.gradle اضافه کنید:

اما اگر مدیریت وابستگی های پروژه شما از نوع Maven است موارد زیر را در فایل pom.xml اضافه کنید تا بتوانید از OpenCSV استفاده کنید:

مثال زیر شیوه خواندن و پردازش فایل CSV با کمک OpenCSV را نشان می دهد. فایل CSV استفاده شده، همان است که در ابتدای این مطلب نشان داده شد.

خروجی هم به شکل زیر است:

 

خواندن و پردازش فایل CSV به کمک Apache Commons CSV

Apache Commons CSV یک کتابخانه اصطلاحاً ۳rd-party است که برای خواندن و پردازش جاوا استفاده می شود. این کتابخانه امکانات مختلفی برای خواندن فایل CSV با فرمت های دلخواه ارائه می دهد.

برای استفاده در یک پروژه Gradle خط زیر را به فایل build.gradle اضافه کنید:

اما پروژه شما از نوع Maven است موارد زیر را در فایل pom.xml اضافه کنید:

کد زیر به عنوان یک مثال ارائه شده تا شما با نحوه استفاده از کتابخانه Apache Commons CSV برای خواندن و پردازش محتوای یک فایل CSV در جاوا، آشنا شوید.

کد بالا خروجی زیر را به دست می دهد:

جمع بندی

اینها مواردی بود که می تواند به شما نشان دهد چطور می توانید مقادیر یک فایل CSV را بخوانید و ضمن جداسازی، آن ها را پردازش کنید. در این مطلب کوتاه، ما روش های مختلفی نگاه انداختیم، از نوشتن کد با کلاس های استاندارد جاوا تا کتابخانه Apache Commons CSV .

برای فایل های CSV ساده که مقادیر خود فیلدها شامل کاراکتر جداکننده کاما نمی شوند، کلاس های استاندارد جاوا مثل دو مورد اول که بررسی شد، به خوبی نیاز را در این زمینه برطرف می کنند. اما برای فایل های پیچیده که جداکننده ها و کاراکترهای خاصی دارند، باید به استفاده ار کتابخانه ها رجوع کنید.

اینجا دو مورد از محبوب ترین کتابخانه ها را معرفی شدند، اما من خودم OpenCSV را بیشتر می پسندم و توصیه می کنم؛ چرا که کتابخانه OpenCSV علاوه بر پشتیبانی از انواع زیادی از فرمت ها و کاراکترهای خاص، امکانات بیشتری را هم پیاده سازی کرده که پردازش فایل های CSV را ساده تر می کند.

 

امیدوارم این مطلب برای شما مفید بوده باشد و آن را با دوستان و همکاران خود به اشتراک بگذارید!

 

 

 

منبع: How to read and parse a CSV file in Java

نظرتان را برای ما بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *