java:class_path

This is an old revision of the document!


A PCRE internal error occured. This might be caused by a faulty plugin

====== Η κλάση Path ====== Η κλάση //java.nio.file.Path//, εισήχθη στην έκδοση SE 7 της Java. Όπως υποδηλώνει το όνομά της, η κλάση //Path// είναι μια προγραμματική αναπαράσταση ενός μονοπατιού στο σύστημα αρχείων. Ένα παράδειγμα //Path// αντανακλά την υποκείμενη πλατφόρμα. Στο λειτουργικό σύστημα Solaris, ένα //Path// χρησιμοποιεί τη σύνταξη του Solaris (/home/Joe/foo) και στο Microsoft Windows, ένα //Path// χρησιμοποιεί τη σύνταξη των Windows (C:\home\Joe\foo). Ένα //Path// δεν είναι ανεξάρτητο από το σύστημα. Δεν μπορούμε να συγκρίνουμε ένα //Path// από το σύστημα αρχείων Solaris και να περιμένουμε να ταιριάξει με ένα //Path// από ένα σύστημα αρχείων των Windows, ακόμη και αν η δομή της διεύθυνσης είναι η ίδια και οι δύο παρουσίες εντοπίζουν το ίδιο σχετικό αρχείο. Το αρχείο ή η διεύθυνση που αντιστοιχεί στο //Path// μπορεί να μην υπάρχει. Μπορούμε να δημιουργήσουμε ένα παράδειγμα //Path// και να το χειριστούμε με διάφορους τρόπους: μπορούμε να προσθέσουμε σε αυτό, να εξάγουμε τμήματα από αυτό ή ακόμα και να το συγκρίνουμε με ένα άλλο //Path//. Επίσης, μπορούμε να χρησιμοποιήσουμε τις μεθόδους της κλάσης //Files// για να ελέγξουμε την ύπαρξη του αρχείου που αντιστοιχεί στο //Path//, να δημιουργήσουμε το αρχείο, να το ανοίξουμε, να το διαγράψουμε, να του αλλάξουμε τα δικαιώματά του, και ούτω καθεξής. ==== Λειτουργίες της Path ==== Η κλάση //Path// περιλαμβάνει διάφορες μεθόδους που μπορούν να χρησιμοποιηθούν για να αποκτήσουν πληροφορίες σχετικά με το μονοπάτι, αποκτήσουν πρόσβαση σε στοιχεία του μονοπατιού, μετατρέψουν το μονοπάτι σε άλλες μορφές, ή να εξάγουν τμήματα ενός μονοπατιού. Υπάρχουν επίσης μέθοδοι για το ταίριασμα της συμβολοσειράς του μονοπατιού και μέθοδοι για την αφαίρεση τμήμάτων από ένα μονοπάτι. Εδώ θα εξετάσουμε αυτές τις μεθόδους της Path. ==== Δημιουργώντας ένα Path ==== Ένα παράδειγμα //Path// περιέχει τις πληροφορίες που χρησιμοποιούνται για τον καθορισμό της θέσης του αρχείου ή διεύθυνσης. Αφού οριστεί, ένα //Path// είναι εφοδιασμένο με μία σειρά από ένα ή περισσότερα ονόματα. Ένα στοιχείο ρίζα ή ένα όνομα αρχείου μπορεί να περιλαμβάνεται, αλλά δεν είναι απαραίτητο. Ένα //Path// μπορεί να αποτελείται από ένα μόνο όνομα διεύθυνσης ή αρχείου. Μπορούμε εύκολα να δημιουργήσουμε ένα αντικείμενο //Path// χρησιμοποιώντας μία από τις ακόλουθες μεθόδους με χρήση της βοηθητικής κλάσης //Paths// (σημειώστε το πληθυντικό) : <code java> Path p1 = Paths.get("/tmp/foo"); Path p2 = Paths.get(args[0]); Path p3 = Paths.get(URI.create("file:///Users/joe/FileTest.java")); </code> Η μέθοδος ''Paths.get("/users/sally")'' είναι συντομογραφία για τον παρακάτω κώδικα : <code java> Path p4 = FileSystems.getDefault().getPath("/users/sally"); </code> Το ακόλουθο παράδειγμα δημιουργεί το /home/joe/logs/foo.log υποθέτοντας ότι το η home διεύθυνση του χρήστη είναι η /home/joe. <code java> Path p5 = Paths.get(System.getProperty("user.home"),"logs", "foo.log"); </code> ==== Ανάκτηση πληροφοριών σχετικά με ένα Path ==== Μπορείτε να σκεφτείτε το //Path// ως την αποθήκευση αυτών των στοιχείων ονομάτων σαν μια ακολουθία. Το υψηλότερο στοιχείο στην δομή του καταλόγου θα βρίσκεται στο ευρετήριο 0. Η χαμηλότερη στοιχείο στην δομή διευθύνσεων θα βρίσκεται στο ευρετήριο //[n-1]//, όπου //n// είναι ο αριθμός των στοιχείων ονομάτων στο //Path//. Μέθοδοι είναι διαθέσιμες για την ανάκτηση μεμονωμένων στοιχείων ή κομματιών του //Path// χρησιμοποιώντας αυτά τα ευρετήρια. Τα παραδείγματα που θα χρησιμοποιήσουμε παρακάτω χρησιμοποιούν την ακόλουθη δομή διευθύνσεων. {{ :java:io-dirstructure.gif?250 |}} Το ακόλουθο απόσπασμα κώδικα ορίζει ένα παράδειγμα //Path// και στη συνέχεια, επικαλείται διάφορες μεθόδους για να λάβει πληροφορίες σχετικά με τη διαδρομή: <code java> // None of these methods requires that the file corresponding // to the Path exists. // Microsoft Windows syntax Path path = Paths.get("C:\\home\\joe\\foo"); // Solaris syntax Path path = Paths.get("/home/joe/foo"); System.out.format("toString: %s%n", path.toString()); System.out.format("getFileName: %s%n", path.getFileName()); System.out.format("getName(0): %s%n", path.getName(0)); System.out.format("getNameCount: %d%n", path.getNameCount()); System.out.format("subpath(0,2): %s%n", path.subpath(0,2)); System.out.format("getParent: %s%n", path.getParent()); System.out.format("getRoot: %s%n", path.getRoot()); </code> Έξοδος σε λειτουργικό σύστημα Microsoft Windows : <code java> C:\home\joe\foo foo home 3 home\joe \home\joe C:\ </code> Έξοδος σε λειτουργικό σύστημα Solaris OS : <code java> /home/joe/foo foo home 3 home/joe /home/joe / </code> Το προηγούμενο παράδειγμα δείχνει την έξοδο για ένα απόλυτο μονοπάτι. Στο ακόλουθο παράδειγμα, καθορίζεται ένα σχετικό μονοπάτι : <code java> // Solaris syntax Path path = Paths.get("sally/bar"); </code> or <code java> // Microsoft Windows syntax Path path = Paths.get("sally\\bar"); </code> {{ :java:path.gif?400 |}} ==== Αφαίρεση περιττών κομματιών από ένα Path ==== Πολλά συστήματα αρχείων χρησιμοποιούν τον συμβολισμό "." για να υποδηλώσουν την τρέχουσα διεύθυνση και τον ".." για να υποδηλώσουν τη γονική διεύθυνση. Μπορεί να έχουμε μια κατάσταση όπου ένα μονοπάτι περιέχει περιττές πληροφορίες καταλόγου. Ίσως ένας server έχει ρυθμιστεί ώστε να αποθηκεύσει τα log αρχεία του στην "/ dir / logs /". διεύθυνση, και θέλουμε να διαγράψουμε το τελικό σύμβολο "/". από το μονοπάτι. Τα παραδείγματα που ακολουθούν περιλαμβάνουν και τα δύο περιττά κομμάτια : <code java> /home/./joe/foo /home/sally/../joe/foo </code> Η μέθοδος //normalize// αφαιρεί τυχόν περιττά στοιχεία, το οποίο περιλαμβάνουν οποιεσδήποτε περιπτώσεις "." ή "directory/..". Και τα δύο προηγούμενα παραδείγματα ομαλοποίηση στο / home / Joe / foo. Είναι σημαντικό να σημειωθεί ότι η //normalize// δεν ελέγχει στο σύστημα αρχείων, όταν "καθαρίζει" το μονοπάτι. Πρόκειται για μία εντελώς συντακτική λειτουργία. Στο δεύτερο παράδειγμα, αν το //sally// ήταν ένα symbolic link, αφαιρώντας το sally/.. θα μπορούσε να οδηγήσει σε ένα //Path// που δεν εντοπίζει πια το ζητούμενο αρχείο. Για να "καθαρίσουμε" ένα μονοπάτι, διασφαλίζοντας παράλληλα ότι το αποτέλεσμα εντοπίζει το σωστό αρχείο, μπορούμε να χρησιμοποιήσουμε τη μέθοδο //toRealPath//. Αυτή η μέθοδος περιγράφεται στην παρακάτω. ==== Μετατροπή ενός Path ==== Μπορούμε να χρησιμοποιήσουμε τρεις μεθόδους για να μετατρέψουμε ένα //Path//. Αν χρειαστεί να μετατρέψουμε το μονοπάτι σε ένα string που μπορεί να ανοίξει από ένα browser, μπορούμε να χρησιμοποιήσουμε την μέθοδο //toUri//. Για παράδειγμα: <code java> Path p1 = Paths.get("/home/logfile"); // Result is file:///home/logfile System.out.format("%s%n", p1.toUri()); </code> Η μέθοδος //toAbsolutePath// μετατρέπει ένα μονοπάτι σε ένα απόλυτο μονοπάτι. Αν το μονοπάτι είναι ήδη απόλυτο, επιστρέφει το ίδιο αντικείμενο Path. Η μέθοδος //toAbsolutePath// μπορεί να είναι πολύ χρήσιμη κατά την επεξεργασία ονομάτων αρχείων εισαγόμενα από τον χρήστη . Για παράδειγμα: <code java> class FileTest { public static void main(String[] args) { if (args.length < 1) { System.out.println("usage: FileTest file"); System.exit(-1); } // Converts the input string to a Path object. Path inputPath = Paths.get(args[0]); // Converts the input Path // to an absolute path. // Generally, this means prepending // the current working // directory. If this example // were called like this: // java FileTest foo // the getRoot and getParent methods // would return null // on the original "inputPath" // instance. Invoking getRoot and // getParent on the "fullPath" // instance returns expected values. Path fullPath = inputPath.toAbsolutePath(); } } </code> Η μέθοδος //toAbsolutePath// μετατρέπει την είσοδο του χρήστη και επιστρέφει ένα //Path// που επιστρέφει χρήσιμες τιμές όταν ερωτηθούν. Το αρχείο δεν είναι απαραίτητο να υπάρχει για να λειτουργήσει αυτή η μέθοδος. Η μέθοδος //toRealPath// επιστρέφει την πραγματική πορεία ενός υπάρχοντος αρχείου. Επίσης, εκτελεί πολλές λειτουργίες σε μία: * Αν περνά σε αυτή τη μέθοδο η τιμή //true// και το σύστημα αρχείων υποστηρίζει symbolic links, τότε επιλύει όλα τα symbolic links στο μονοπάτι. * Αν το //Path// είναι σχετικό, επιστρέφει ένα απόλυτο //Path//. * Αν το //Path// περιλαμβάνει τυχόν περιττά στοιχεία, επιστρέφει ένα μονοπάτι χωρίς αυτά τα στοιχεία. |Προηγούμενο: [[:java:formatting | Μορφοποίηση Εξόδου ]]| Επόμενο: [[:java:creating_and_reading_directories | Δημιουργία και ανάγνωση διευθύνσεων ]] |

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