קראו קובץ לתוך ArrayList

1. סקירה כללית

במדריך זה נדון דרכים שונות לקריאת קובץ לתוך רשימת מערך.

ישנן דרכים רבות לקרוא קובץ ב- Java. ברגע שנקרא קובץ, נוכל לבצע פעולות רבות בתוכן הקובץ.

חלק מהפעולות הללו, כמו מיון, עשויות לדרוש עיבוד של כל תוכן הקובץ בזיכרון. על מנת לבצע פעולות כאלה, ייתכן שנצטרך לקרוא את הקובץ כ- מַעֲרָך או א רשימה של שורות או מילים.

2. שימוש FileReader

הדרך הקריאה ביותר בבסיס Java היא השימוש הבסיסי ביותר FileReader. לפי הגדרה, FileReader הוא כיתת נוחות לקריאת זרם דמויות מ- קוֹבֶץ.

ישנם בונים מרובים הזמינים לאתחול א FileReader:

FileReader f = FileReader חדש (נתיב מחרוזת); FileReader f = FileReader חדש (File f); FileReader f = FileReader חדש (FileDescriptor fd);

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

עם זאת, אם אנו רוצים לספק קידוד תווים מותאם אישית וגודל מאגר בתים, נוכל להשתמש InputStreamReader אוֹ FileInputStream.

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

תוצאת ArrayList = ArrayList חדש (); נסה (FileReader f = FileReader חדש (שם קובץ)) {StringBuffer sb = StringBuffer חדש (); ואילו (f.ready ()) {char c = (char) f.read (); אם (c == '\ n') {result.add (sb.toString ()); sb = StringBuffer חדש (); } אחר {sb.append (c); }} אם (sb.length ()> 0) {result.add (sb.toString ()); }} להחזיר תוצאה;

3. שימוש BufferedReader

למרות ש FileReader די קל לשימוש, רצוי לעטוף אותו תמיד BuffereReader, בעת קריאת קובץ.

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

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

BufferedReader br = BufferedReader חדש (FileReader חדש (שם קובץ)); BufferedReader br = חדש BufferedReader (FileReader חדש (שם קובץ), גודל);

בנוסף לשיטות שעברו בירושה מה- קוֹרֵא מעמד, BufferedReader גם מספק קריאת שורה() שיטה, לקרוא שורה שלמה כ- חוּט:

תוצאת ArrayList = ArrayList חדש (); נסה (BufferedReader br = BufferedReader חדש (FileReader חדש (שם קובץ))) {while (br.ready ()) {result.add (br.readLine ()); }} 

4. שימוש סוֹרֵק

דרך נפוצה נוספת לקריאת קבצים היא דרך סוֹרֵק.

סוֹרֵק הוא סורק טקסט פשוט, המשמש לניתוח סוגים ומחרוזות פרימיטיביים, תוך שימוש בביטויים רגולריים.

בעת קריאת קבצים, סוֹרֵק מאותחל באמצעות קוֹבֶץ אוֹ FileReader חפצים:

סורק s = סורק חדש (קובץ חדש (שם קובץ)); סורק s = סורק חדש (FileReader חדש (שם קובץ));

דומה ל BufferedReader, סורק מספק קריאת שורה() שיטה לקרוא שורה שלמה. בנוסף, זה גם מספק א hasNext () שיטה כדי לציין אם קיימים ערכים נוספים לקריאה או לא:

תוצאת ArrayList = ArrayList חדש (); נסה (סורק s = סורק חדש (FileReader חדש (שם קובץ))) {בזמן (s.hasNext ()) {result.add (s.nextLine ()); } להחזיר תוצאה; }

סוֹרֵק מפרק את הקלט שלו לאסימונים באמצעות מפריד, ומפריד ברירת המחדל הוא רווח לבן. ניתן להמיר אסימונים אלה לערכים מסוגים שונים, באמצעות שונים הַבָּא (הבא, nextLongוכו ') שיטות זמינות:

תוצאת ArrayList = ArrayList חדש (); נסה (סורק s = סורק חדש (FileReader חדש (שם קובץ))) {בזמן (s.hasNext ()) {result.add (s.nextInt ()); } להחזיר תוצאה; }

5. שימוש Files.readAllLines

כנראה הדרך הקלה ביותר לקרוא קובץ ולנתח את כל שורותיו ל- רשימת מערך, הוא להשתמש ב- readAllLines () שיטה זמינה ב קבצים מעמד:

תוצאת רשימה = Files.readAllLines (Paths.get (שם קובץ));

שיטה זו יכולה גם לקחת פרמטר של ערכת תווים, כדי לקרוא אותה לפי קידוד תווים ספציפי:

Charset charset = Charset.forName ("ISO-8859-1"); תוצאת רשימה = Files.readAllLines (Paths.get (שם קובץ), ערכה);

6. מסקנה

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

לדוגמא, אנו יכולים להשתמש BufferedReader לחוצץ תווים לצורך יעילות. לחלופין, נוכל להשתמש סוֹרֵק לקרוא פרימיטיבי באמצעות תוחמים. או אולי נוכל פשוט להשתמש Files.readAllLines (), מבלי לדאוג ליישום הבסיסי.

כרגיל, הקוד זמין במאגר GitHub שלנו.


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