העתק מדריך ב- Java

1. הקדמה

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

2. באמצעות java.nio ממשק API

ג'אווה NIO זמין מאז Java 1.4. ג'אווה 7 הוצגה NIO 2 שהביא הרבה תכונות שימושיות כמו תמיכה טובה יותר בטיפול בקישורים סימבוליים, גישה לתכונות קבצים. זה גם סיפק לנו שיעורים כגון נָתִיב, שבילים, ו קבצים שהפכו את המניפולציה של מערכת הקבצים לקלה בהרבה.

בואו נדגים גישה זו:

public static void copyDirectory (String sourceDirectoryLocation, String destinationDirectoryLocation) זורק את IOException {Files.walk (Paths.get (sourceDirectoryLocation)) .forEach (source -> {Path destination = Paths.get (destinationDirectoryLocation, source.toString () .substring (sourceDirectoryLocation) .length ())); נסה את {Files.copy (מקור, יעד);} לתפוס (IOException e) {e.printStackTrace ();}}); }

בדוגמה זו, הלכנו על עץ הקבצים המושרש בספריית המקור הנתונה באמצעות Files.walk () והופעל Files.copy () עבור כל קובץ או ספריה מצאנו בספריית המקור.

3. באמצעות java.io ממשק API

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

עם זאת, אם אנו רוצים להישאר תואמים לגרסאות Java ישנות יותר, נוכל להעתיק ספריה באמצעות רקורסיה ו java.io. קובץ תכונות:

בטל סטטי פרטי copyDirectory (קובץ sourceDirectory, File destinationDirectory) זורק IOException {if (! destinationDirectory.exists ()) {destinationDirectory.mkdir (); } עבור (מחרוזת f: sourceDirectory.list ()) {copyDirectoryCompatibityMode (קובץ חדש (sourceDirectory, f), קובץ חדש (destinationDirectory, f)); }}

במקרה הזה, ניצור ספריה בספריית היעד עבור כל ספריה בעץ ספריות המקור. ואז נפעיל את copyDirectoryCompatibityMode () שיטה:

חלל סטטי ציבורי copyDirectoryCompatibityMode (מקור קובץ, יעד קובץ) זורק IOException {if (source.isDirectory ()) {copyDirectory (מקור, יעד); } אחר {copyFile (מקור, יעד); }} 

גַם, בואו נראה איך להעתיק קובץ באמצעות FileInputStream ו FileOutputStream:

בטל סטטי פרטי copyFile (SourceFile File, FileFile file) זורק IOException {try (InputStream in = FileInputStream new (sourceFile); OutputStream out = FileOutputStream new (destinationFile)) {byte [] buf = byte new [1024]; אורך int; בעוד ((אורך = in.read (buf))> 0) {out.write (buf, 0, אורך); }}} 

4. שימוש ב- Apache Commons IO

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

בואו להוסיף commons-io לשלנו pom.xml קוֹבֶץ:

 commons-io commons-io 2.7 

לבסוף, בואו להעתיק ספריה באמצעות גישה זו:

בטל סטטי ציבורי copyDirectory (String sourceDirectoryLocation, String destinationDirectoryLocation) זורק IOException {File sourceDirectory = קובץ חדש (sourceDirectoryLocation); קובץ destinationDirectory = קובץ חדש (destinationDirectoryLocation); FileUtils.copyDirectory (sourceDirectory, destinationDirectory); }

כפי שמוצג בדוגמה הקודמת, Apache Commons IO מקל על הכל בהרבה, מאז אנחנו רק צריכים להתקשר FileUtils.copyDirectory () שיטה.

5. מסקנה

מאמר זה המחיש כיצד להעתיק ספרייה ב- Java. דוגמאות קוד מלאות זמינות ב- GitHub.