Apache Commons IO

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

פרויקט Apache Commons נוצר בכדי לספק למפתחים מערך ספריות נפוצות בהן הם יכולים להשתמש בקוד היומיומי שלהם.

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

2. תלות של Maven

כדי להשתמש בספרייה, בוא נכלול את התלות הבאה ב- Maven ב- pom.xml:

 commons-io commons-io 2.5 

את הגרסאות האחרונות של הספרייה תוכלו למצוא ב- Maven Central.

3. שיעורי שירות

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

3.1. FileUtils

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

בוא נסתכל על כיצד לקרוא או להעתיק קבצים באמצעות FileUtils:

קובץ קובץ = FileUtils.getFile (getClass (). GetClassLoader () .getResource ("fileTest.txt"). GetPath ()); קובץ tempDir = FileUtils.getTempDirectory (); FileUtils.copyFileToDirectory (קובץ, tempDir); קובץ newTempFile = FileUtils.getFile (tempDir, file.getName ()); נתוני מחרוזת = FileUtils.readFileToString (newTempFile, Charset.defaultCharset ());

3.2. FilenameUtils

כלי עזר זה מספק דרך מערכת הפעלה-אגנוסטית לביצוע פונקציות נפוצות בשמות קבצים. בואו נראה כמה מהשיטות השונות בהן אנו יכולים להשתמש:

מחרוזת fullPath = FilenameUtils.getFullPath (נתיב); סיומת מחרוזת = FilenameUtils.getExtension (path); מחרוזת baseName = FilenameUtils.getBaseName (נתיב);

3.3. FileSystemUtils

אנחנו יכולים להשתמש FileSystemUtils ל בדוק את השטח הפנוי בנפח או כונן נתון:

long freeSpace = FileSystemUtils.freeSpaceKb ("/");

4. קלט ופלט

חבילה זו מספקת מספר יישומים עבור עבודה עם זרמי קלט ופלט.

נתמקד TeeInputStream ו TeeOutputSteam. המילה "טי"(נגזר מאות"ט") משמש בדרך כלל לתיאור שיש לפצל קלט יחיד לשני יציאות שונות.

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

מחרוזת str = "שלום עולם."; ByteArrayInputStream inputStream = ByteArrayInputStream חדש (str.getBytes ()); ByteArrayOutputStream outputStream1 = ByteArrayOutputStream חדש (); ByteArrayOutputStream outputStream2 = ByteArrayOutputStream חדש (); FilterOutputStream teeOutputStream = TeeOutputStream חדש (outputStream1, outputStream2); TeeInputStream חדש (inputStream, teeOutputStream, true) .read (בתים חדשים [str.length ()]); assertEquals (str, String.valueOf (outputStream1)); assertEquals (str, String.valueOf (outputStream2));

5. פילטרים

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

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

בואו נראה דוגמה שעושה שימוש WildcardFileFilter ו SuffixFileFilter כדי לאחזר קבצים עם "ple"בשמותיהם עם"טקסטסיומת. שים לב שאנחנו עוטפים את המסננים לעיל באמצעות ANDFileFilter:

@Test ציבורי בטל כאשר GetFilewith_ANDFileFilter_thenFind_sample_txt () זורק IOException {String path = getClass (). GetClassLoader () .getResource ("fileTest.txt") .getPath (); קובץ dir = FileUtils.getFile (FileenameUtils.getFullPath (path)); assertEquals ("sample.txt", dir.list (AndFileFilter חדש (WildcardFileFilter חדש ("* ple *", IOCase.INSENSITIVE), SuffixFileFilter חדש ("txt"))] [0]); }

6. משווים

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

6.1. PathFileComparator

ה PathFileComparator ניתן להשתמש בכיתה למיין רשימות או מערכי קבצים לפי הנתיב שלהם או באופן תלוי-רישיות, תלוי-רישיות או תלוי-מערכת. בואו נראה כיצד למיין נתיבי קבצים בספריית המשאבים באמצעות כלי עזר זה:

@Test ציבורי בטל כאשרSortDirWithPathFileComparator_thenFirstFile_aaatxt () זורק IOException {PathFileComparator pathFileComparator = חדש PathFileComparator (IOCase.INSENSITIVE); נתיב מחרוזת = FilenameUtils.getFullPath (getClass () .getClassLoader () .getResource ("fileTest.txt") .getPath ()); קובץ dir = קובץ חדש (נתיב); קובץ [] קבצים = dir.listFiles (); pathFileComparator.sort (קבצים); assertEquals ("aaa.txt", קבצים [0] .getName ()); }

שים לב שהשתמשנו ב- IOCase. רגיש תְצוּרָה. PathFileComparator מספק גם מספר מקרים של יחידים שיש להם אפשרויות שונות של רגישות למקורות ומיון הפוך.

שדות סטטיים אלה כוללים PATH_COMPARATOR, PATH_INSENSITIVE_COMPARATOR, PATH_INSENSITIVE_REVERSE, PATH_SYSTEM_COMPARATOR, עד כמה שם.

6.2. SizeFileComparator

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

בוא נכתוב מבחן יחידה המדגים השוואה בין גדלי הקבצים:

@ מבחן ציבורי בטל כאשר SizeFileComparator_thenLargerFile_large () זורק IOException {SizeFileComparator sizeFileComparator = SizeFileComparator חדש (); קובץ largeFile = FileUtils.getFile (getClass (). GetClassLoader () .getResource ("fileTest.txt"). GetPath ()); קובץ smallerFile = FileUtils.getFile (getClass (). GetClassLoader () .getResource ("sample.txt") .getPath ()); int i = sizeFileComparator.compare (largeFile, smallerFile); Assert.assertTrue (i> 0); }

7. צג קבצים

חבילת צג ה- IO של Commons מספקת את היכולת ל- לעקוב אחר שינויים בקובץ או בספריה. בואו נראה דוגמה מהירה לאיך FileAlterationMonitor ניתן להשתמש ביחד עם FileAlterationObserver ו FileAlterationListener כדי לפקח על קובץ או תיקיה.

מתי FileAlterationMonitor מתחיל, נתחיל לקבל התראות על שינויים בקבצים בספריה שנמצאת במעקב:

FileAlterationObserver צופה = FileAlterationObserver חדש (תיקיה); FileAlterationMonitor monitor = FileAlterationMonitor חדש (5000); FileAlterationListener fal = FileAlterationListenerAdaptor חדש () {@Override public void onFileCreate (File file) {// on create action} @Override public void onFileDelete (file file) {// on action delete}}; observer.addListener (fal); monitor.addObserver (צופה); monitor.start ();

8. מסקנה

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

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


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