בדוק אם קובץ או ספרייה קיימים בג'אווה

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

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

ראשית, נתחיל בממשקי ה- NIO המודרניים של NIO ואז נסקור את גישות ה- IO הישנות.

2. שימוש java.nio.file.Files

כדי לבדוק אם קיים קובץ או ספרייה, אנו יכולים למנף את ה- Files.exists (נתיב) שיטה. כפי שעולה מחתימת השיטה, ראשית עלינו להשיג א נָתִיב לקובץ או לספריה המיועדים. ואז נוכל להעביר את זה נָתִיב אל ה Files.exists (נתיב) שיטה:

נתיב נתיב = Paths.get ("לא קיים.טקסט"); assertFalse (Files.exists (path));

מכיוון שהקובץ לא קיים, הוא חוזר שֶׁקֶר. ראוי להזכיר גם שאם Files.exists (נתיב) שיטה נתקלת ב IOException, זה יחזור שֶׁקֶרגם.

מצד שני, כאשר הקובץ הנתון קיים, הוא יחזור נָכוֹן כצפוי:

נתיב tempFile = Files.createTempFile ("baeldung", "exist-article"); assertTrue (Files.exists (tempFile));

כאן אנו יוצרים קובץ זמני ואז מתקשרים ל- Files.exists (נתיב) שיטה.

זה אפילו עובד עבור ספריות:

נתיב tempDirectory = Files.createTempDirectory ("baeldung- קיים"); assertTrue (Files.exists (tempDirectory));

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

assertTrue (Files.isDirectory (tempDirectory)); assertFalse (Files.isDirectory (tempFile)); assertTrue (Files.isRegularFile (tempFile));

יש גם notExists (נתיב) שיטה שחוזרת נָכוֹן אם הנתון נָתִיב לא קיים:

assertFalse (Files.notExists (tempDirectory));

לפעמים ה Files.exists (נתיב) החזרות שֶׁקֶר מכיוון שאין לנו הרשאות הקובץ הנדרשות. בתרחישים כאלה, אנו יכולים להשתמש ב- Files.isReadable (נתיב) שיטה כדי לוודא שהקובץ אכן קריא על ידי המשתמש הנוכחי:

assertTrue (Files.isReadable (tempFile)); assertFalse (Files.isReadable (Paths.get ("/ root / .bashrc")));

2.1. קישורים סימבוליים

כברירת מחדל, ה- Files.exists (נתיב) השיטה עוקבת אחר הקישורים הסמליים. אם קובץ א יש קישור סמלי לקובץ ב, אז ה Files.exists (A) השיטה מחזירה נָכוֹן אם ורק אם הקובץ ב קיים כבר:

יעד נתיב = Files.createTempFile ("baeldung", "target"); סמל נתיב = Paths.get ("test-link-" + ThreadLocalRandom.current (). NextInt ()); נתיב symbolicLink = Files.createSymbolicLink (סמל, מטרה); assertTrue (Files.exists (symbolicLink));

כעת אם אנו מוחקים את יעד הקישור, את Files.exists (נתיב) יחזור שֶׁקֶר:

Files.deleteIfExists (יעד); assertFalse (Files.exists (symbolicLink));

מכיוון שיעד הקישור כבר לא קיים, בעקבות הקישור לא יוביל לשום דבר, ו Files.exists (נתיב) יחזור שֶׁקֶר.

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

assertTrue (Files.exists (symbolicLink, LinkOption.NOFOLLOW_LINKS));

מכיוון שהקישור עצמו קיים, ה Files.exists (נתיב) השיטה מחזירה נָכוֹן. כמו כן, אנו יכולים לבדוק אם א נָתִיב הוא קישור סמלי באמצעות ה- Files.isSymbolicLink (נתיב) שיטה:

assertTrue (Files.isSymbolicLink (symbolicLink)); assertFalse (Files.isSymbolicLink (יעד));

3. שימוש java.io. קובץ

אם אנו משתמשים ב- Java 7 או בגרסה חדשה יותר של Java, מומלץ מאוד להשתמש ב- API NAVA של Java NIO מודרניים עבור דרישות מסוג זה..

עם זאת, כדי לוודא אם קיימים קובץ או ספרייה בעולם ה- IO מדור קודם, אנו יכולים להתקשר ל- קיים () שיטה ב קוֹבֶץ מקרים:

assertFalse (קובץ חדש ("לא חוקי") קיים ());

אם הקובץ או הספריה כבר קיימים, הם יחזרו נָכוֹן:

נתיב tempFilePath = Files.createTempFile ("baeldung", "exist-io"); נתיב tempDirectoryPath = Files.createTempDirectory ("baeldung-existent-io"); קובץ tempFile = קובץ חדש (tempFilePath.toString ()); קובץ tempDirectory = קובץ חדש (tempDirectoryPath.toString ()); assertTrue (tempFile.exists ()); assertTrue (tempDirectory.exists ());

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

ה isFile () השיטה, לעומת זאת, מחזירה נָכוֹן אם הנתיב הנתון הוא קובץ קיים:

assertTrue (tempFile.isFile ()); assertFalse (tempDirectory.isFile ());

באופן דומה, ה isDirectory () השיטה מחזירה נָכוֹן אם הנתיב הנתון הוא ספריה קיימת:

assertTrue (tempDirectory.isDirectory ()); assertFalse (tempFile.isDirectory ());

סוף - סוף, ה יכול לקרוא() השיטה מחזירה נָכוֹן אם הקובץ קריא:

assertTrue (tempFile.canRead ()); assertFalse (קובץ חדש ("/ root / .bashrc"). canRead ());

כשהוא חוזר שֶׁקֶר, הקובץ לא קיים או שהמשתמש הנוכחי אינו מחזיק ברשות הקריאה בקובץ.

4. מסקנה

במדריך קצר זה ראינו כיצד לוודא שקיים קובץ או ספרייה בג'אווה. בהמשך הדרך דיברנו על NIO מודרני ועל ממשקי ה- API של IO מדור קודם. כמו כן, ראינו כיצד ה- NIO API מטפל בקישורים סימבוליים.

כרגיל, כל הדוגמאות זמינות ב- GitHub.