רשום קבצים בספריה ב- Java

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

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

2. רישום

אם אנו רוצים לרשום את כל הקבצים בספרייה ולדלג על חפירה נוספת בספריות המשנה, נוכל פשוט להשתמש בה java.io.File # listFiles:

public Set listFilesUsingJavaIO (String dir) {return Stream.of (File new (dir) .listFiles ()) .filter (file ->! file.isDirectory ()) .map (File :: getName) .collect (Collectors.toSet ()); }

3. DirectoryStream

עם זאת, Java 7 הציגה אלטרנטיבה מהירה יותר ל File # listFiles שקוראים לו DirectoryStream.

בואו נראה איך המקבילה נראית:

public Set listFilesUsingDirectoryStream (מחרוזת dir) זורק IOException {Set fileList = new HashSet (); נסה (DirectoryStream stream = Files.newDirectoryStream (Paths.get (dir))) {for (Path path: stream) {if (! Files.isDirectory (path)) {fileList.add (path.getFileName () .toString () ); }}} להחזיר את רשימת הקבצים; }

אנו יכולים לראות זאת בקלות בזמן DirectoryStream יכול להיות מהיר יותר, זה לא חלק מה- זרם ממשק API ואינו מתאים לעבודה איתו.

גַם, DirectoryStream דורש שנסגור את המשאב, כלומר עוטף אותו עם נסה עם משאביםגם.

4. הליכה

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

בואו נשתמש java.nio.file.Files # ללכת לרשימת כל הקבצים בספרייה לעומק נתון:

public Set listFilesUsingFileWalk (מחרוזת dir, עומק int) זורק IOException {try (Stream stream = Files.walk (Paths.get (dir), עומק)) {return stream .filter (file ->! Files.isDirectory (file)). map (Path :: getFileName) .map (Path :: toString) .collect (Collectors.toSet ()); }}

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

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

public Set listFilesUsingFileWalkAndVisitor (מחרוזת dir) זורק IOException {Set fileList = HashSet חדש (); Files.walkFileTree (Paths.get (dir), SimpleFileVisitor חדש () {@Override ציבורי FileVisitResult visitFile (קובץ נתיב, תכונות BasicFileAttributes) זורק IOException {אם (! Files.isDirectory (file)) {fileList.add (file.getFileName ( ) .toString ());} להחזיר FileVisitResult.CONTINUE;}}); להחזיר fileList; }

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

5. מסקנה

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

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