קריאת קובץ בגרובי

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

במדריך מהיר זה נחקור דרכים שונות לקריאת קובץ ב- Groovy.

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

בואו לחקור אותם בזה אחר זה בסעיפים הבאים.

2. קריאה א קוֹבֶץ שורה אחר שורה

ישנן שיטות גרובי IO רבות כמו קריאת שורה ו כל שורה זמין לקריאת קבצים שורה אחר שורה.

2.1. באמצעות File.withReader

נתחיל עם ה- קוֹבֶץ.withReader שיטה. זה יוצר חדש BufferedReader תחת הכריכות שבהן נוכל לקרוא את התוכן באמצעות קריאת שורה שיטה.

לדוגמא, בואו נקרא קובץ שורה אחר שורה ונדפיס כל שורה. נחזיר גם את מספר השורות:

int readFileLineByLine (מחרוזת filePath) {קובץ קובץ = קובץ חדש (filePath) def שורה, noOfLines = 0; file.withReader {reader -> while ((line = reader.readLine ())! = null) {println "$ {line}" noOfLines ++}} להחזיר noOfLines}

בואו ניצור קובץ טקסט רגיל fileContent.txt עם התוכן הבא והשתמש בו לבדיקה:

שורה 1: שלום עולם !!! שורה 2: זהו תוכן קובץ. שורה 3: תוכן מחרוזת

בואו לבדוק את שיטת השירות שלנו:

def 'אמור להחזיר מספר שורות בקובץ נתון filePath' () {given: def filePath = "src / main / resources / fileContent.txt" כאשר: def noOfLines = readFile.readFileLineByLine (filePath) ואז: noOfLines noOfLines מופע של מספר שלם של טוען noOfLines , 3} 

ה withReader ניתן להשתמש בשיטה גם עם פרמטר ערכת כמו UTF-8 או ASCII לקריאת קבצים מקודדים. בואו נראה דוגמה:

קובץ חדש ("src / main / resources / utf8Content.html"). withReader ('UTF-8') {reader -> def line while ((line = reader.readLine ())! = null) {println "$ { קו} "}}

2.2. באמצעות File.eachLine

אנחנו יכולים גם להשתמש ב- כל שורה שיטה:

קובץ חדש ("src / main / resources / fileContent.txt"). eachLine {line -> println line} 

2.3. באמצעות File.newInputStream עם InputStream.eachLine

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

def is = קובץ חדש ("src / main / resources / fileContent.txt"). newInputStream () is.eachLine {println it} is.close ()

כאשר אנו משתמשים ב- newInputStream בשיטה, עלינו להתמודד עם סגירת ה- InputStream.

אם אנו משתמשים ב- עם InputStream במקום זאת, היא תטפל בסגירת ה- InputStream בשבילנו:

קובץ חדש ("src / main / resources / fileContent.txt"). עם InputStream {stream -> stream.eachLine {line -> line println}}

3. קריאה א קוֹבֶץ לתוך רשימה

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

3.1. באמצעות File.readLines

לשם כך, אנו יכולים להשתמש ב- readLines שיטה שקוראת את הקובץ לא רשימה שֶׁל מיתרים.

בואו נסתכל במהירות על דוגמא שקוראת את תוכן הקובץ ומחזירה רשימת שורות:

רשימה readFileInList (מחרוזת filePath) {קובץ קובץ = קובץ חדש (filePath) def שורות = file.readLines () שורות החזרה}

בוא נכתוב מבחן מהיר באמצעות fileContent.txt:

def 'צריך להחזיר את תוכן הקובץ ברשימת השורות הנתונות filePath' () {given: def filePath = "src / main / resources / fileContent.txt" כאשר: def שורות = readFile.readFileInList (filePath) ואז: שורות שורות מופע של רשימת טענה lines.size (), 3}

3.2. באמצעות File.collect

אנו יכולים גם לקרוא את תוכן הקובץ ל- רשימה שֶׁל מיתרים משתמש ב לאסוף ממשק API:

def list = קובץ חדש ("src / main / resources / fileContent.txt"). אסוף את {it} 

3.3. משתמש ב כפי ש מַפעִיל

אנחנו יכולים אפילו למנף את כפי ש המפעיל לקרוא את תוכן הקובץ לתוך חוּט מַעֲרָך:

מערך def = קובץ חדש ("src / main / resources / fileContent.txt") כמחרוזת []

4. קריאה א קוֹבֶץ לסינגל חוּט

4.1. באמצעות File.text

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

בואו נסתכל על דוגמה:

מחרוזת readFileString (מחרוזת filePath) {קובץ קובץ = קובץ חדש (filePath) מחרוזת fileContent = file.text להחזיר fileContent} 

בואו נאמת זאת באמצעות בדיקת יחידה:

def 'צריך להחזיר תוכן קובץ במחרוזת נתונה filePath' () {given: def filePath = "src / main / resources / fileContent.txt" כאשר: def fileContent = readFile.readFileString (filePath) ואז: fileContent fileContent למשל של קובץ מחרוזת.מכיל ("" "שורה 1: שלום עולם !!! שורה 2: זהו תוכן קובץ. שורה 3: תוכן מחרוזת" "")}

4.2. באמצעות File.getText

אם אנו משתמשים ב- getTest (תווים) בשיטה, אנו יכולים לקרוא את התוכן של קובץ מקודד לתוך חוּט על ידי מתן פרמטר של ערכת תווים כמו UTF-8 או ASCII:

מחרוזת readFileStringWithCharset (מחרוזת filePath) {קובץ קובץ = קובץ חדש (filePath) מחרוזת utf8Content = file.getText ("UTF-8") החזר utf8Content}

בואו ניצור קובץ HTML עם תוכן UTF-8 בשם utf8Content.html לבדיקת היחידה:

ᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗ ᛋᚳᛖᚪᛚ᛫ᚦᛖᚪᚻ᛫ᛗᚪᚾᚾᚪ᛫ᚷᛖᚻᚹᛦᛚᚳ᛫ᛗᛁᚳᛚᚢᚾ᛫ᚻᛦᛏ᛫ᛞᚫᛚᚪᚾ ᚷᛁᚠ᛫ᚻᛖ᛫ᚹᛁᛚᛖ᛫ᚠᚩᚱ᛫ᛞᚱᛁᚻᛏᚾᛖ᛫ᛞᚩᛗᛖᛋ᛫ᚻᛚᛇᛏᚪᚾ 

בואו נראה את מבחן היחידה:

def 'אמור להחזיר תוכן קובץ מקודד UTF-8 במחרוזת נתון filePath' () {given: def filePath = "src / main / resources / utf8Content.html" כאשר: def encodedContent = readFile.readFileStringWithCharset (filePath) ואז: encodedContent encodedContent מופע של מחרוזת}

5. קריאת קובץ בינארי עם File.bytes

Groovy מקל על קריאת קבצים שאינם טקסט או קבצים בינאריים. באמצעות בתים נכס, אנחנו יכולים לקבל את התוכן של קוֹבֶץ כ בתים מַעֲרָך:

בתים [] readBinaryFile (מחרוזת filePath) {קובץ קובץ = קובץ חדש (filePath) בתים [] binaryContent = file.bytes להחזיר binaryContent}

נשתמש בקובץ תמונה png, sample.png, עם התוכן הבא לבדיקת היחידה:

בואו נראה את מבחן היחידה:

def 'אמור להחזיר תוכן קובץ בינארי במערך בתים נתון filePath' () {given: def filePath = "src / main / resources / sample.png" when: def binaryContent = readFile.readBinaryFile (filePath) then: binaryContent binaryContent instance of byte [ ] binaryContent.length == 329}

6. מסקנה

במדריך מהיר זה, ראינו דרכים שונות לקריאת קובץ ב- Groovy בשיטות שונות של ה- קוֹבֶץ שיעור יחד עם BufferedReader ו InputStream.

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


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