Java - שנה שם או העבר קובץ

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

במדריך מהיר זה, נבחן שינוי שם / העברת קובץ ב- Java.

ראשית נבדוק את השימוש ב- קבצים ו נָתִיב שיעורים מ- NIO ואז Java קוֹבֶץ בכיתה, גוגל גויאבה, ולבסוף ספריית ה- IO של אפאצ'י קומונס.

מאמר זה הוא חלק מה- "ג'אווה - חזרה לבסיסיסדרה כאן על באלדונג.

2. התקנה

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

סופי פרטי מחרוזת FILE_TO_MOVE = "src / test / resources / originalFileToMove.txt"; מחרוזת גמר פרטית TARGET_FILE = "src / test / resources / targetFileToMove.txt"; @ לפני כל חלל ציבורי createFileToMove () זורק IOException {File fileToMove = קובץ חדש (FILE_TO_MOVE); fileToMove.createNewFile (); } @ AfterEach ציבורי ריק ריק CleanUpFiles () {File targetFile = קובץ חדש (TARGET_FILE); targetFile.delete (); }

3. שימוש ב- NIO שבילים ו קבצים שיעורים

נתחיל ב משתמש ב Files.move () שיטה מחבילת Java NIO:

@Test הציבור בטל givenUsingNio_whenMovingFile_thenCorrect () זורק IOException {Path fileToMovePath = Paths.get (FILE_TO_MOVE); נתיב targetPath = Paths.get (TARGET_FILE); Files.move (fileToMovePath, targetPath); }

ב- JDK7 חבילת ה- NIO עודכנה משמעותית וה- נָתִיב הכיתה הוסיפה. זה מספק שיטות למניפולציה נוחה של חפצי מערכת הקבצים.

שים לב שגם הקובץ וגם ספריית היעד צריכים להתקיים.

4. באמצעות קוֹבֶץ מעמד

בואו נסתכל כעת כיצד אנו יכולים לעשות את אותו הדבר משתמש ב File.renameTo () שיטה:

@Test הציבור בטל givenUsingFileClass_whenMovingFile_thenCorrect () זורק IOException {File fileToMove = קובץ חדש (FILE_TO_MOVE); isMoved בוליאני = fileToMove.renameTo (קובץ חדש (TARGET_FILE)); אם (! isMoved) {זרוק FileSystemException חדש (TARGET_FILE); }}

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

ציין זאת renameTo () זורק רק שני סוגים של חריגים:

  • ExceptionException - אם מנהל אבטחה שולל גישה לכתיבה למקור או ליעד
  • NullPointerException - במקרה ויעד הפרמטר הוא אפס

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

5. שימוש בגויאבה

לאחר מכן - בואו נסתכל על פתרון הגויאבה, המספק נוח Files.move () שיטה:

@Test הציבור בטל givenUsingGuava_whenMovingFile_thenCorrect () זורק IOException {File fileToMove = קובץ חדש (FILE_TO_MOVE); קובץ targetFile = קובץ חדש (TARGET_FILE); com.google.common.io.Files.move (fileToMove, targetFile); }

שוב, בדוגמה זו, הקובץ שיש להעביר וספריית היעד צריכים להתקיים.

6. עם Commons IO

לבסוף, בואו נסתכל על פיתרון עם Apache Commons IO - כנראה הפשוט ביותר:

@Test הציבור בטל givenUsingApache_whenMovingFile_thenCorrect () זורק IOException {FileUtils.moveFile (FileUtils.getFile (FILE_TO_MOVE), FileUtils.getFile (TARGET_FILE)); }

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

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

@Test הציבור בטל givenUsingApache_whenMovingFileApproach2_thenCorrect () זורק IOException {FileUtils.moveFileToDirectory (FileUtils.getFile ("src / test / resources / fileToMove.txt"), FileUtils.getFile ("src / main / resources /") }

6. מסקנה

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

הקוד לדוגמאות זמין באתר GitHub.