מחלקת הקבצים של ג'אווה

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

במדריך זה ניתן סקירה של ה- קוֹבֶץ הכיתה, שהיא חלק מה- java.io ממשק API. ה קוֹבֶץ class נותן לנו את היכולת לעבוד עם קבצים וספריות במערכת הקבצים.

2. יצירת א קוֹבֶץ לְהִתְנַגֵד

ה קוֹבֶץ בכיתה יש 4 בונים ציבוריים. בהתאם לצרכי היזם, סוגים שונים של מקרים של קוֹבֶץ ניתן ליצור מחלקה.

  • קובץ (שם נתיב מחרוזת) - יוצר מופע המייצג את הנתון שם נתיב
  • קובץ (הורה מחרוזת, ילד מחרוזת) - יוצר מופע המייצג את הנתיב שנוצר על ידי הצטרפות ל- הוֹרֶה וה יֶלֶד שבילים
  • קובץ (הורה לקובץ, ילד מחרוזת) - יוצר מופע עם הנתיב שנוצר על ידי הצטרפות ל- הוֹרֶה דרך המיוצגת על ידי אחר קוֹבֶץ מופע ו יֶלֶד נָתִיב
  • קובץ (URI uri) - יוצר מופע המייצג את מזהה המשאב האחיד הנתון

3. עבודה עם קוֹבֶץ מעמד

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

3.1. יצירה ומחיקה של ספריות וקבצים

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

ספריות ותיקים הם נמחק באמצעות לִמְחוֹק שיטה. כל השיטות הללו מחזירות א בוליאני ערך כלומר נָכוֹן כאשר הפעולה תצליח, ו שֶׁקֶר אחרת:

@ מבחן בטל ציבורי givenDir_whenMkdir_thenDirIsDeleted () {ספריית קבצים = קובץ חדש ("dir"); assertTrue (directory.mkdir ()); assertTrue (directory.delete ()); } @Test ציבורי בטל givenFile_whenCreateNewFile_thenFileIsDeleted () {File file = קובץ חדש ("file.txt"); נסה את {assertTrue (file.createNewFile ()); } לתפוס (IOException e) {fail ("לא ניתן ליצור" + "file.txt"); } assertTrue (file.delete ()); }

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

ה isDirectory שיטה ניתן להשתמש כדי לבדוק אם הקובץ המסומן בשם המסופק הוא ספריה, בעוד ה isFile שיטה ניתן להשתמש בו כדי לבדוק אם הקובץ המסומן בשם המסופק הוא קובץ. ונוכל להשתמש ה קיים שיטה כדי לבדוק אם במערכת יש כבר ספריה או קובץ.

3.2. קבלת מטא נתונים על מופעי קבצים

ה קוֹבֶץ בכיתה יש מספר שיטות שמחזירות מטא נתונים אודות קוֹבֶץ מקרים. בואו נראה כיצד להשתמש ב- getName, getParentFile, ו getPath שיטות:

@Test ציבור בטל givenFile_whenCreateNewFile_thenMetadataIsCorrect () {String sep = File.separator; קובץ parentDir = makeDir ("filesDir"); קובץ ילד = קובץ חדש (parentDir, "file.txt"); נסה את {child.createNewFile (); } לתפוס (IOException e) {fail ("לא ניתן ליצור" + "file.txt"); } assertEquals ("file.txt", child.getName ()); assertEquals (parentDir.getName (), child.getParentFile (). getName ()); assertEquals (parentDir.getPath () + sep + "file.txt", child.getPath ()); removeDir (parentDir); }

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

3.3. הגדרת הרשאות קבצים וספריות

ה קוֹבֶץ בכיתה יש שיטות המאפשרות להגדיר הרשאות לקובץ או בספריה. הנה, נסתכל על setWritable ו setReadableשיטות:

@Test הציבור בטל givenReadOnlyFile_whenCreateNewFile_thenCantModFile () {קובץ parentDir = makeDir ("readDir"); קובץ ילד = קובץ חדש (parentDir, "file.txt"); נסה את {child.createNewFile (); } לתפוס (IOException e) {fail ("לא ניתן ליצור" + "file.txt"); } child.setWritable (false); בוליאני שניתן לכתוב = נכון; נסה (FileOutputStream fos = FileOutputStream חדש (ילד)) {fos.write ("שלום עולם" .getBytes ()); // כתיבת פעולת fos.flush (); } לתפוס (IOException e) {writable = false; } סוף סוף {removeDir (parentDir); } assertFalse (ניתן לכתיבה); }

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

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

@Test ציבורי בטל givenWriteOnlyFile_whenCreateNewFile_thenCantReadFile () {קובץ parentDir = makeDir ("writeDir"); קובץ ילד = קובץ חדש (parentDir, "file.txt"); נסה את {child.createNewFile (); } לתפוס (IOException e) {fail ("לא ניתן ליצור" + "file.txt"); } child.setReadable (false); קריא בוליאני = נכון; נסה (FileInputStream fis = FileInputStream חדש (ילד)) {fis.read (); // קריאת פעולה} לתפוס (IOException e) {קריא = שקר; } סוף סוף {removeDir (parentDir); } assertFalse (קריא); }

שוב, ה- JVM יזרוק א IOException לניסיונות לקרוא קובץ שבו קריאות אינן מותרות.

3.4. רישום קבצים בתוך מדריך

ה קוֹבֶץ בכיתה יש שיטות המאפשרות לנו לרשום קבצים הכלולים בספריה. באופן דומה ניתן גם לרשום ספריות. כאן נסתכל על רשימה ו list (FilenameFilter) שיטות:

@Test ציבורי בטל givenFilesInDir_whenCreateNewFile_thenCanListFiles () {File parentDir = makeDir ("filtersDir"); מחרוזת [] קבצים = {"file1.csv", "file2.txt"}; עבור (קובץ מחרוזת: קבצים) {נסה {קובץ חדש (parentDir, קובץ) .createNewFile (); } לתפוס (IOException e) {fail ("לא ניתן ליצור" + קובץ); }} // רישום רגיל assertEquals (2, parentDir.list (). אורך); // רישום מסונן FilenameFilter csvFilter = (dir, ext) -> ext.endsWith (". csv"); assertEquals (1, parentDir.list (csvFilter) .length); removeDir (parentDir); }

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

3.5. שינוי שם קבצים וספריות

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

@ מבחן ציבורי בטל givenDir_whenMkdir_thenCanRenameDir () {מקור קובץ = makeDir ("מקור"); יעד קובץ = makeDir ("יעד"); שם בוליאני שונה = source.renameTo (יעד); אם (שונה שם) {assertFalse (source.isDirectory ()); assertTrue (destination.isDirectory ()); removeDir (יעד); }}

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

3.6. קבלת מידע על שטח הדיסק

ה קוֹבֶץ class גם מאפשר לנו לקבל מידע על שטח דיסק. בוא נראה הפגנה של getFreeSpace שיטה:

@Test הציבור בטל givenDataWritten_whenWrite_thenFreeSpaceReduces () {String home = System.getProperty ("user.home"); מחרוזת sep = File.separator; קובץ testDir = makeDir (בית + sep + "מבחן"); קובץ לדוגמה = קובץ חדש (testDir, "sample.txt"); long freeSpaceBefore = testDir.getFreeSpace (); נסה {writeSampleDataToFile (דוגמה); } לתפוס (IOException e) {fail ("לא יכול לכתוב ל-" + "sample.txt"); } freeSpaceAfter ארוך = testDir.getFreeSpace (); assertTrue (freeSpaceAfter <freeSpaceBefore); removeDir (testDir); }

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

4. מסקנה

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

כמו תמיד, קוד המקור המלא של הדוגמה זמין ב- Github.


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