This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
java:creating_and_reading_directories [2015/03/03 22:17] elkarafe |
java:creating_and_reading_directories [2016/02/26 11:15] (current) |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Δημιουργία και ανάγνωση διευθύνσεων ====== | ||
| + | |||
| ==== Καταχώρηση Root Διευθύνσεων ενός Συστήματος Αρχείων ==== | ==== Καταχώρηση Root Διευθύνσεων ενός Συστήματος Αρχείων ==== | ||
| Line 29: | Line 31: | ||
| FileAttribute<Set<PosixFilePermission>> attr = | FileAttribute<Set<PosixFilePermission>> attr = | ||
| PosixFilePermissions.asFileAttribute(perms); | PosixFilePermissions.asFileAttribute(perms); | ||
| - | Files.createDirectory(file, attr);<code java> | + | Files.createDirectory(file, attr); |
| </code> | </code> | ||
| Line 56: | Line 58: | ||
| Μπορούμε να καταχωρήσουμε όλα τα περιεχόμενα μιας διεύθυνσης με τη χρήση της μεθόδου //newDirectoryStream(Path)//. Αυτή η μέθοδος επιστρέφει ένα αντικείμενο που υλοποιεί το περιβάλλον //DirectoryStream//. Η κλάση που υλοποιεί το interface DirectoryStream υλοποιεί επίσης //Iterable//, ώστε να μπορούμε να διατρέξουμε το stream διέυθυνσης, διαβάζοντας όλα τα αντικείμενα. Αυτή η προσέγγιση έχει καλή κλιμάκωση σε πολύ μεγάλες διευθύνσεις. | Μπορούμε να καταχωρήσουμε όλα τα περιεχόμενα μιας διεύθυνσης με τη χρήση της μεθόδου //newDirectoryStream(Path)//. Αυτή η μέθοδος επιστρέφει ένα αντικείμενο που υλοποιεί το περιβάλλον //DirectoryStream//. Η κλάση που υλοποιεί το interface DirectoryStream υλοποιεί επίσης //Iterable//, ώστε να μπορούμε να διατρέξουμε το stream διέυθυνσης, διαβάζοντας όλα τα αντικείμενα. Αυτή η προσέγγιση έχει καλή κλιμάκωση σε πολύ μεγάλες διευθύνσεις. | ||
| + | Σημείωση: Το DirectoryStream που επιστρέφεται είναι ένα //stream//. Εάν δεν χρησιμοποιείτε try-with-resources, μην ξεχάσετε να κλείσετε το //stream// στο //finally// block. Η try-with-resources δομή φροντίζει γι 'αυτό μόνη της. | ||
| + | |||
| + | Το ακόλουθο κομμάτι κώδικα δείχνει πώς να εκτυπώσετε τα περιεχόμενα μιας διεύθυνσης: | ||
| + | |||
| + | <code java> | ||
| + | Path dir = ...; | ||
| + | try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) { | ||
| + | for (Path file: stream) { | ||
| + | System.out.println(file.getFileName()); | ||
| + | } | ||
| + | } catch (IOException | DirectoryIteratorException x) { | ||
| + | // IOException can never be thrown by the iteration. | ||
| + | // In this snippet, it can only be thrown by newDirectoryStream. | ||
| + | System.err.println(x); | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | Τα αντικείμενα //Path// που επιστρέφουν από την iterator είναι τα ονόματα των εισόδων που επιλύθηκαν κατά της διεύθυνσης. Έτσι, εάν καταχωρούμε τα περιεχόμενα της διεύθυνσης /tmp, οι είσοδοι επιστρέφονται με τη μορφή /tmp/a, /tmp/b, και ούτω καθεξής. | ||
| + | |||
| + | Αυτή η μέθοδος επιστρέφει ολόκληρο το περιεχόμενο μιας διεύθυνσης: αρχεία, συνδέσμους, υποδιευθύνσεις και κρυφά αρχεία. Αν θέλουμε να είμαστε πιο επιλεκτικοί σχετικά με το περιεχόμενο που ανακτάται, μπορούμε να χρησιμοποιήσουμε μία από τις άλλες μεθόδους //newDirectoryStream//. | ||
| + | |||
| + | Σημειώστε ότι αν υπάρχει ένα exception κατά τη διάρκεια της επανάληψης διεύθυνσης, τότε το //DirectoryIteratorException// εμφανίζεται με το //IOException// ως αιτία. | ||