java:creating_and_reading_directories

Δημιουργία και ανάγνωση διευθύνσεων

Καταχώρηση Root Διευθύνσεων ενός Συστήματος Αρχείων

Μπορούμε να καταγράψουμε όλες τις root διευθύνσεις ενός συστήματος αρχείων, χρησιμοποιώντας τη μέθοδο FileSystem.getRootDirectories. Αυτή η μέθοδος επιστρέφει ένα Iterable, το οποίο μας επιτρέπει να χρησιμοποιήσουμε τον for βρόγχο για να επαναλάβουμε όλες τις root διευθύνσεις.

Το ακόλουθο απόσπασμα κώδικα εκτυπώνει τις root διευθύνσεις για το προεπιλεγμένο σύστημα αρχείων:

Iterable<Path> dirs = FileSystems.getDefault().getRootDirectories();
for (Path name: dirs) {
    System.err.println(name);
}

Δημιουργία μιας Διεύθυνσης

Μπορούμε να δημιουργήσουμε μια νέα διεύθυνση με τη χρήση της createDirectory (Path, FileAttribute <?>) μεθόδου. Αν δεν καθορίσουμε καθόλου FileAttributes, τότε η νέα διεύθυνση θα έχει προεπιλεγμένα χαρακτηριστικά. Για παράδειγμα:

Path dir = ...;
Files.createDirectory(path);

Το ακόλουθο κομμάτι κώδικα δημιουργεί μια νέα διεύθυνση για ένα σύστημα αρχείων POSIX που έχει συγκεκριμένα δικαιώματα:

Set<PosixFilePermission> perms =
    PosixFilePermissions.fromString("rwxr-x---");
FileAttribute<Set<PosixFilePermission>> attr =
    PosixFilePermissions.asFileAttribute(perms);
Files.createDirectory(file, attr);

Για να δημιουργήσουμε μια διεύθυνση κάποιοα επίπεδα βαθιά όταν μία ή περισσότερες από τις μητρικές τους διευθύνσεις δεν θα μπορούσε να υπάρχει ακόμα, μπορούμε να χρησιμοποιήσουμε τη μέθοδο createDirectories (Path, FileAttribute <?>). Όπως και με την createDirectory (Path, FileAttribute <?>) μέθοδο, μπορούμε να καθορίσουμε ένα προαιρετικό σύνολο των αρχικών χαρακτηριστικών αρχείου. Το ακόλουθο κομμάτι κώδικα χρησιμοποιεί προεπιλεγμένα χαρακτηριστικά:

Files.createDirectories(Paths.get("foo/bar/test"));

Οι διευθύνσεις δημιουργούνται, όπως απαιτείται, από πάνω προς τα κάτω. Στο foo/bar/test παράδειγμα, αν η διεύθυνση foo δεν υπάρχει, δημιουργείται. Στη συνέχεια δημιουργείται η διεύθυνση bar, εάν χρειάζεται, και τέλος δημιουργείται η διεύθυνση test .

Είναι δυνατόν η μέθοδος αυτή να αποτύχει μετά τη δημιουργία κάποιων, αλλά όχι όλων, των μητρικών διευθύνσεων.

Δημιουργία μιας Προσωρινής Διεύθυνσης

Μπορούμε να δημιουργήσουμε μία προσωρινή διεύθυνη, χρησιμοποιώντας μία από τις createTempDirectory μεθόδους:

  • createTempDirectory(Path, String, FileAttribute<?>…)
  • createTempDirectory(String, FileAttribute<?>…)

Η πρώτη μέθοδος επιτρέπει στον κώδικας να καθορίσει μια θέση για την προσωρινή διεύθυνση και η δεύτερη μέθοδος δημιουργεί μία νέα διεύθυνση στην προεπιλεγμένη διεύθυνση προσωρινών αρχείων.

Καταχώρηση των περιεχομένων μιας Διεύθυνσης

Μπορούμε να καταχωρήσουμε όλα τα περιεχόμενα μιας διεύθυνσης με τη χρήση της μεθόδου newDirectoryStream(Path). Αυτή η μέθοδος επιστρέφει ένα αντικείμενο που υλοποιεί το περιβάλλον DirectoryStream. Η κλάση που υλοποιεί το interface DirectoryStream υλοποιεί επίσης Iterable, ώστε να μπορούμε να διατρέξουμε το stream διέυθυνσης, διαβάζοντας όλα τα αντικείμενα. Αυτή η προσέγγιση έχει καλή κλιμάκωση σε πολύ μεγάλες διευθύνσεις.

Σημείωση: Το DirectoryStream που επιστρέφεται είναι ένα stream. Εάν δεν χρησιμοποιείτε try-with-resources, μην ξεχάσετε να κλείσετε το stream στο finally block. Η try-with-resources δομή φροντίζει γι 'αυτό μόνη της.

Το ακόλουθο κομμάτι κώδικα δείχνει πώς να εκτυπώσετε τα περιεχόμενα μιας διεύθυνσης:

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);
}

Τα αντικείμενα Path που επιστρέφουν από την iterator είναι τα ονόματα των εισόδων που επιλύθηκαν κατά της διεύθυνσης. Έτσι, εάν καταχωρούμε τα περιεχόμενα της διεύθυνσης /tmp, οι είσοδοι επιστρέφονται με τη μορφή /tmp/a, /tmp/b, και ούτω καθεξής.

Αυτή η μέθοδος επιστρέφει ολόκληρο το περιεχόμενο μιας διεύθυνσης: αρχεία, συνδέσμους, υποδιευθύνσεις και κρυφά αρχεία. Αν θέλουμε να είμαστε πιο επιλεκτικοί σχετικά με το περιεχόμενο που ανακτάται, μπορούμε να χρησιμοποιήσουμε μία από τις άλλες μεθόδους newDirectoryStream.

Σημειώστε ότι αν υπάρχει ένα exception κατά τη διάρκεια της επανάληψης διεύθυνσης, τότε το DirectoryIteratorException εμφανίζεται με το IOException ως αιτία.

java/creating_and_reading_directories.txt · Last modified: 2016/02/26 11:15 (external edit)