מנתחי univocity

1. הקדמה

במדריך זה נבחן במהירות את Univocity Parsers, ספרייה לניתוח קבצי CSV, TSV וקבצים ברוחב קבוע בג'אווה.

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

2. התקנה

כדי להשתמש בניתוחים, עלינו להוסיף את התלות האחרונה ב- Maven לפרויקט שלנו pom.xml קוֹבֶץ:

 com.univocity univocity-parsers 2.8.4 

3. שימוש בסיסי

3.1. קריאה

ב- Univocity אנו יכולים לנתח במהירות קובץ שלם לאוסף של חוּט מערכים המייצגים כל שורה בקובץ.

ראשית, בוא נתנתק קובץ CSV על ידי מתן קוֹרֵא לקובץ ה- CSV שלנו CsvParser עם הגדרות ברירת מחדל:

נסה (Reader inputReader = InputStreamReader חדש (FileInputStream חדש (קובץ חדש ("src / test / resources / productList.csv")), "UTF-8")) {CsvParser parser = new CsvParser (CsvParserSettings new ()); רשימה parsedRows = parser.parseAll (inputReader); להחזיר parsedRows; } לתפוס (IOException e) {// לטפל בחריג}

אנו יכולים להחליף את ההיגיון הזה בקלות לניתוח קובץ TSV על ידי מעבר ל TsvParser ומספק לו קובץ TSV.

זה רק קצת יותר מסובך לעבד קובץ ברוחב קבוע. ההבדל העיקרי הוא שעלינו לספק את רוחבי השדה שלנו בהגדרות המנתח.

בואו נקרא קובץ ברוחב קבוע על ידי מתן קובץ FixedWidthFields להתנגד לשלנו FixedWidthParserSettings:

נסה (Reader inputReader = InputStreamReader חדש (FileInputStream חדש (קובץ חדש ("src / test / resources / productList.txt")), "UTF-8")) {FixedWidthFields fieldLengths = new FixedWidthFields (8, 30, 10); הגדרות FixedWidthParserSettings = FixedWidthParserSettings חדשים (fieldLengths); מנתח FixedWidthParser = FixedWidthParser חדש (הגדרות); רשימה parsedRows = parser.parseAll (inputReader); להחזיר parsedRows; } לתפוס (IOException e) {// לטפל בחריג}

3.2. כְּתִיבָה

כעת לאחר שסיקרנו את קבצי הקריאה בניתוחים, בואו ללמוד כיצד לכתוב אותם.

כתיבת קבצים דומה מאוד לקריאתם בכך שאנו מספקים א סוֹפֵר יחד עם ההגדרות הרצויות לנוסח התואם את סוג הקובץ שלנו.

בואו ניצור שיטה לכתיבת קבצים בשלושת הפורמטים האפשריים:

writeData בוליאני ציבורי (רשימת מוצרים, OutputType outputType, String outputPath) {try (Writer outputWriter = new OutputStreamWriter (FileOutputStream new (File new (outputPath)), "UTF-8")) {switch (outputType) {case CSV: כותב CsvWriter = CsvWriter חדש (outputWriter, CsvWriterSettings חדש ()); writer.writeRowsAndClose (מוצרים); לשבור; מקרה TSV: כותב TsvWriter = TsvWriter חדש (outputWriter, TsvWriterSettings חדש ()); writer.writeRowsAndClose (מוצרים); לשבור; מקרה FIXED_WIDTH: FixedWidthFields fieldLengths = FixedWidthFields חדש (8, 30, 10); הגדרות FixedWidthWriterSettings = FixedWidthWriterSettings חדשים (fieldLengths); כותב FixedWidthWriter = FixedWidthWriter חדש (outputWriter, הגדרות); writer.writeRowsAndClose (מוצרים); לשבור; ברירת מחדל: logger.warn ("OutputType לא חוקי:" + outputType); להחזיר כוזב; } להחזיר נכון; } לתפוס (IOException e) {// חריג להתמודד}}

כמו בקריאת קבצים, כתיבת קבצי CSV וקבצי TSV זהים כמעט. עבור קבצים ברוחב קבוע, עלינו לספק את רוחב השדה להגדרות שלנו.

3.3. שימוש במעבדי שורות

Univocity מספק מספר מעבדי שורות בהם אנו יכולים להשתמש ומספק גם את היכולת ליצור משלנו.

כדי להרגיש את השימוש במעבדי שורות, בואו נשתמש ב- BatchedColumnProcessor לעבד קובץ CSV גדול יותר בקבוצות של חמש שורות:

נסה (Reader inputReader = InputStreamReader חדש (FileInputStream חדש (קובץ חדש (relativePath)), "UTF-8")) {CsvParserSettings settings = new CsvParserSettings (); settings.setProcessor (חדש BatchedColumnProcessor (5) {@Override public void batchProcessed (int rowsInThisBatch) {}}); מנתח CsvParser = CsvParser חדש (הגדרות); רשימה parsedRows = parser.parseAll (inputReader); להחזיר parsedRows; } לתפוס (IOException e) {// לטפל בחריג}

כדי להשתמש במעבד שורה זה, אנו מגדירים אותו במערכת שלנו CsvParserSettings ואז כל מה שאנחנו צריכים לעשות זה להתקשר parseAll.

3.4. קריאה וכתיבה לפולי ג'אווה

רשימת חוּט מערכים זה בסדר, אך לעתים קרובות אנו עובדים עם נתונים בשעועית ג'אווה. Univocity מאפשרת גם קריאה וכתיבה לפולי ג'אווה שמבוארים במיוחד.

בואו נגדיר א מוצר שעועית עם ההערות של Univocity:

מוצר בכיתה ציבורית {@Parsed (field = "product_no") פרטי מחרוזת productNumber; @Pared פרטי תיאור מחרוזת; @Parsed (field = "unit_price") יחידה צפה פרטית; // גטרים וקובעים}

ההערה העיקרית היא @Parsed ביאור.

אם כותרת העמודה שלנו תואמת את שם השדה, נוכל להשתמש בה @Parsed ללא כל ערכים שצוינו. אם כותרת העמודה שלנו שונה משדה השדה נוכל לציין את כותרת העמודה באמצעות ה- שדה תכונה.

עכשיו שהגדרנו את שלנו מוצר שעועית, בואו נקרא את קובץ ה- CSV שלנו לתוכה:

נסה (Reader inputReader = InputStreamReader חדש (FileInputStream חדש (קובץ חדש ("src / test / resources / productList.csv")), "UTF-8")) {BeanListProcessor rowProcessor = BeanListProcessor new (Product.class); הגדרות CsvParserSettings = CsvParserSettings חדשים (); settings.setHeaderExtractionEnabled (נכון); settings.setProcessor (rowProcessor); מנתח CsvParser = CsvParser חדש (הגדרות); parser.parse (inputReader); return rowProcessor.getBeans (); } לתפוס (IOException e) {// לטפל בחריג}

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

לאחר מכן, בואו לכתוב את רשימת ה- מוצריוצאים לקובץ ברוחב קבוע:

נסה (Writer outputWriter = OutputStreamWriter חדש (FileOutputStream חדש (קובץ חדש (outputPath)), "UTF-8")) {BeanWriterProcessor rowProcessor = new BeanWriterProcessor (Product.class); FixedWidthFields fieldLengths = FixedWidthFields חדשים (8, 30, 10); הגדרות FixedWidthWriterSettings = FixedWidthWriterSettings חדשים (fieldLengths); settings.setHeaders ("product_no", "תיאור", "unit_price"); settings.setRowWriterProcessor (rowProcessor); כותב FixedWidthWriter = FixedWidthWriter חדש (outputWriter, הגדרות); writer.writeHeaders (); עבור (מוצר מוצר: מוצרים) {writer.processRecord (מוצר); } סופר.סגור (); לחזור אמיתי; } לתפוס (IOException e) {// לטפל בחריג}

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

4. הגדרות

ל- Univocity יש מספר הגדרות שנוכל להחיל על המנתחים. כפי שראינו קודם, אנו יכולים להשתמש בהגדרות כדי להחיל מעבד שורה על המנתחים.

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

בואו נתאים את הגדרות מנתח ה- CSV שלנו כדי לשים כמה מגבלות על הנתונים שקראנו:

הגדרות CsvParserSettings = CsvParserSettings חדשים (); settings.setMaxCharsPerColumn (100); settings.setMaxColumns (50); מנתח CsvParser = CsvParser חדש (CsvParserSettings חדש ());

5. מסקנה

במדריך מהיר זה למדנו את היסודות של ניתוח קבצים באמצעות ספריית Univocity.

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

כמו תמיד, קוד המקור זמין ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found