מבוא ל- OpenCSV

1. הקדמה

מאמר מהיר זה מציג את OpenCSV 4, ספרייה נהדרת לכתיבה, קריאה, סדרת סדר, ערעור מחדש ו / או ניתוח. .csv קבצים! להלן נעבור על כמה דוגמאות המדגימות כיצד להגדיר ולהשתמש ב- OpenCSV 4 למאמציכם.

2. הגדרה

כך תוכל להוסיף OpenCSV לפרויקט שלך באמצעות a pom.xml תלות:

 com.opencsv opencsv 4.1 

ה צנצנות עבור OpenCSV ניתן למצוא באתר הרשמי או באמצעות חיפוש מהיר במאגר Maven.

שֶׁלָנוּ .csv הקובץ יהיה ממש פשוט, נשמור על שתי עמודות וארבע שורות:

colA, ColB A, B C, D G, G G, F

3. לשעועית או לא לשעועית

לאחר הוספת OpenCSV ל- pom.xml, אנו יכולים ליישם שיטות טיפול ב- CSV בשתי דרכים נוחות:

  1. באמצעות ה- handy קורא CSV ו CSVWriter אובייקטים (לפעולות פשוטות יותר) או
  2. באמצעות CsvToBean להמיר .csv קבצים לשעועית (המיושמים כמבוארים חפצי ג'אווה רגילים-ישנים).

אנחנו נצמד סינכרוני (אוֹ חסימה) דוגמאות למאמר זה כדי שנוכל להתמקד ביסודות.

זכרו, א סינכרוני השיטה תמנע מהפעלת קוד סביב או לאחר מכן עד לסיום. ככל הנראה כל סביבת ייצור תשתמש אסינכרוני או (לא חוסם) שיטות שיאפשרו להשלים תהליכים או שיטות אחרות תוך כדי אסינכרוני השיטה מסתיימת.

נצלול פנימה אסינכרוני דוגמאות ל- OpenCSV במאמר עתידי.

3.1. ה קורא CSV

קורא CSV - דרך המסופק תקרא הכל() ו readNext () שיטות! בואו נסתכל על אופן השימוש תקרא הכל() באופן סינכרוני:

רשימה ציבורית readAll (קורא קורא) זורק חריג {CSVReader csvReader = CSVReader חדש (קורא); רשימת רשימה = ArrayList חדש (); רשימה = csvReader.readAll (); reader.close (); csvReader.close (); רשימת החזרה; }

ואז נוכל לקרוא לשיטה זו על ידי העברת a BufferedReader:

מחרוזת ציבורית readAllExample () זורק חריג {Reader reader = Files.newBufferedReader (Paths.get (ClassLoader.getSystemResource ("csv / twoColumn.csv"). toURI ())); החזר את CsvReaderExamples.readAll (reader) .toString (); }

באופן דומה, אנו יכולים להפשט readNext() הקורא מצורף .csv שורה אחר שורה:

רשימה ציבורית oneByOne (קורא קורא) זורק חריג {List list = ArrayList new (); CSVReader csvReader = CSVReader חדש (קורא); מחרוזת [] שורה; ואילו ((line = csvReader.readNext ())! = null) {list.add (line); } reader.close (); csvReader.close (); רשימת החזרה; }

ואנחנו יכולים לקרוא לשיטה זו כאן על ידי העברת a BufferReader:

מחרוזת ציבורית oneByOneExample () זורק חריג {Reader reader = Files.newBufferedReader (Paths.get (ClassLoader.getSystemResource ("csv / twoColumn.csv"). toURI ())); החזר את CsvReaderExamples.oneByOne (reader) .toString (); } 

לקבלת גמישות רבה יותר ואפשרויות תצורה תוכלו לחלופין להשתמש CSVReaderBuilder:

מנתח CSVParser = CSVParserBuilder חדש () .withSeparator (',') .withIgnoreQuotations (true) .build (); CSVReader csvReader = CSVReaderBuilder חדש (קורא) .withSkipLines (0) .withCSVParser (מנתח) .build ();

CSVReaderBuilder מאפשר לדלג על כותרות העמודות ולקבוע כללי ניתוח CSVParserBuilder.

באמצעות CSVParserBuilder, אנו יכולים לבחור במפריד עמודות מותאם אישית, להתעלם או לטפל במרכאות, לקבוע כיצד נתמודד עם שדות null וכיצד לפרש תווים שנמלטו. למידע נוסף על הגדרות תצורה אלה עיין במסמכי המפרט הרשמיים.

כמו תמיד, אנא זכור לסגור את כל שלך קוראים כדי למנוע דליפות זיכרון!

3.2. ה CSVWriter

CSVWriter באופן דומה מספק את היכולת לכתוב ל- a .csv הקובץ בבת אחת או שורה אחר שורה.

בואו נסתכל כיצד לכתוב לכתוב ל- a .csv שורה אחר שורה:

מחרוזת ציבורית csvWriterOneByOne (רשימת מחרוזת מערך, נתיב נתיב) זורק חריג {כותב CSVWriter = CSVWriter חדש (FileWriter חדש (path.toString ())); עבור (String [] array: stringArray) {writer.writeNext (array); } סופר.סגור (); החזר Helpers.readFile (נתיב); } 

עכשיו, בואו נציין היכן אנו רוצים לשמור את הקובץ ונקרא לשיטה שכתבנו זה עתה:

מחרוזת ציבורית csvWriterOneByOne () זורק חריג {Path path = Paths.get (ClassLoader.getSystemResource ("csv / writtenOneByOne.csv"). toURI ()); להחזיר CsvWriterExamples.csvWriterOneByOne (Helpers.fourColumnCsvString (), נתיב); }

אנחנו יכולים גם לכתוב את שלנו .csv בבת אחת על ידי מעבר א רשימה שֶׁל חוּט מערכים המייצגים את השורות שלנו .csv. :

מחרוזת ציבורית csvWriterAll (רשימת מחרוזת, נתיב נתיב) זורק חריג {כותב CSVWriter = CSVWriter חדש (FileWriter חדש (path.toString ())); writer.writeAll (stringArray); author.close (); החזר Helpers.readFile (נתיב); }

וככה אנו קוראים לזה:

מחרוזת ציבורית csvWriterAll () זורק חריג {Path path = Paths.get (ClassLoader.getSystemResource ("csv / wroteAll.csv"). toURI ()); החזר CsvWriterExamples.csvWriterAll (Helpers.fourColumnCsvString (), נתיב); }

זהו זה!

3.3. קריאה על בסיס שעועית

OpenCSV מסוגל לבצע סדרת סדרות .csv קבצים לתוכניות קבועות מראש וניתנות לשימוש חוזר, המיושמות כ- Java המבואר פוג'ו שעועית. CsvToBean נבנה באמצעות CsvToBeanBuilder. החל ב- OpenCSV 4, CsvToBeanBuilder היא הדרך המומלצת לעבוד איתה com.opencsv.bean.CsvToBean.

הנה שעועית פשוטה בה אנו יכולים להשתמש כדי לסדר את שני העמודות שלנו .csv מ סעיף 2.:

מחלקה ציבורית SimplePositionBean {@CsvBindByPosition (position = 0) פרטי מחרוזת exampleColOne; @CsvBindByPosition (position = 1) פרטי מחרוזת exampleColTwo; // גטרים וקובעים} 

כל עמודה ב .csv קובץ משויך לשדה בשעועית. המיפויים בין .csv ניתן לבצע כותרות עמודות באמצעות @CsvBindByPosition או ה @CsvBindByName ביאורים המציינים מיפוי לפי מיקום או התאמת מחרוזת כותרת בהתאמה.

ראשית, בואו ניצור מעמד-על בשם CsvBean - זה יאפשר לנו לעשות שימוש חוזר ולהכליל את השיטות שנבנה להלן:

CsvBean בכיתה ציבורית {}

דוגמא לכיתת ילדים:

מחלקה ציבורית NamedColumnBean מרחיבה את CsvBean {@CsvBindByName (column = "name") שם פרטי מחרוזת; גיל אישי פרטי @CsvBindByName; // גטרים וקובעים}

בואו ננחה תקציר שהוחזר באופן סינכרוני רשימה משתמש ב CsvToBean:

 רשימה ציבורית beanBuilderExample (נתיב נתיב, מחלקה מחלקה) זורק חריג {CsvTransfer csvTransfer = new CsvTransfer (); ColumnPositionMappingStrategy ms = ColumnPositionMappingStrategy חדש (); ms.setType (clazz); קורא קורא = Files.newBufferedReader (נתיב); CsvToBean cb = CsvToBeanBuilder חדש (קורא) .withType (clazz) .withMappingStrategy (ms) .build (); csvTransfer.setCsvList (cb.parse ()); reader.close (); החזר csvTransfer.getCsvList (); }

אנחנו עוברים בשעועית שלנו (clazz) והגדר זאת כ- ColumnPositionMappingStrategy. בכך אנו משייכים את שדות השעועית שלנו לעמודות המתאימות שלנו .csv שורות.

אנחנו יכולים לקרוא לזה כאן באמצעות SimplePositionBean תת מחלקה של CsvBean כתבנו לעיל:

מחרוזת ציבורית simplePositionBeanExample () זורק חריג {Path path = Paths.get (ClassLoader.getSystemResource ("csv / twoColumn.csv"). toURI ()); החזר BeanExamples.beanBuilderExample (נתיב, SimplePositionBean.class) .toString (); }

או כאן באמצעות NamedColumnBean - תת מחלקה נוספת של CsvBean:

מחרוזת ציבורית בשםColumnBeanExample () זורקת חריג {Path path = Paths.get (ClassLoader.getSystemResource ("csv / namedColumn.csv"). toURI ()); החזר את BeanExamples.beanBuilderExample (נתיב, NamedColumnBean.class) .toString (); }

3.4. כתיבה על בסיס שעועית

לבסוף, בואו נסתכל כיצד להשתמש ב- StatefulBeanToCsv בכיתה לכתוב לא .csv קוֹבֶץ:

מחרוזת ציבורית writeCsvFromBean (נתיב נתיב) זורק חריג {כותב כותב = FileWriter חדש (path.toString ()); StatefulBeanToCsv sbc = חדש StatefulBeanToCsvBuilder (כותב). WithSeparator (CSVWriter.DEFAULT_SEPARATOR) .build (); רשימת רשימה = ArrayList חדש (); list.add (חדש WriteExampleBean ("Test1", "sfdsf", "fdfd")); list.add (חדש WriteExampleBean ("Test2", "ipso", "facto")); sbc.write (רשימה); author.close (); החזר Helpers.readFile (נתיב); }

כאן אנו מציינים כיצד נתחום את הנתונים שלנו המסופקים כ- רשימה של שצוין CsvBean חפצים.

לאחר מכן נוכל לקרוא לשיטה שלנו writeCsvFromBean () לאחר העברה בנתיב קובץ הפלט הרצוי:

מחרוזת ציבורית writeCsvFromBeanExample () {Path path = Paths.get (ClassLoader.getSystemResource ("csv / wroteBean.csv"). toURI ()); החזר BeanExamples.writeCsvFromBean (נתיב); }

4. מסקנה

הנה לשם - דוגמאות קוד סינכרוני עבור OpenCSV באמצעות שעועית, קורא CSV, ו CSVWriter. עיין במסמכים הרשמיים כאן.

כמו תמיד, דוגמאות הקוד מסופקות ב- GitHub.