User Tools

Site Tools


java:class_path

This is an old revision of the document!


Η κλάση Path

Η κλάση Path αποτελεί προγραμματική αναπαράσταση ενός μονοπατιού στο σύστημα αρχείων (filesystem).

Καθε αντικείμενο της κλάσης Path λαμβάνει υπόψη του τις ιδιαιτερότητες του λειτουργικού συστήματος. Στο λειτουργικό σύστημα GNU/Linux, ένα Path χρησιμοποιεί τη σύνταξη (/home/Joe/foo), ενώ στο Microsoft Windows, ένα Path χρησιμοποιεί τη σύνταξη (C:\home\Joe\foo).

Το αρχείο ή η διεύθυνση που αντιστοιχεί σε ένα αντικείμενο τύπου Path μπορεί να μην υπάρχει. Μπορούμε να δημιουργήσουμε ένα υφιστάμενο ή μη υφιστάμενο Path και να το χειριστούμε με διάφορους τρόπους. Για παράδειγμα, μπορούμε να εξάγουμε τμήματα από αυτό ή ακόμα και να το συγκρίνουμε με ένα άλλο Path. Επίσης, μπορούμε να χρησιμοποιήσουμε τις μεθόδους της κλάσης File για να ελέγξουμε την ύπαρξη του αρχείου ή του καταλόγου που αντιστοιχεί στο Path, να δημιουργήσουμε το αρχείο εάν δεν υπάρχει, να το ανοίξουμε, να το διαγράψουμε, να του αλλάξουμε τα δικαιώματά κ.α.

Δημιουργώντας ένα Path

Ένα παράδειγμα Path περιέχει τις πληροφορίες που χρησιμοποιούνται για τον καθορισμό της θέσης του αρχείου ή του καταλόγου. Ένα Path μπορεί να οριστεί ως το πλήρες path του αρχείου ή του καταλόγου ή το σχετικό path σε σχέση με το σημείο εκτέλεσης του προγράμματος στο filesystem.

Μπορούμε εύκολα να δημιουργήσουμε ένα αντικείμενο Path χρησιμοποιώντας μία από τις ακόλουθες μεθόδους με χρήση της βοηθητικής κλάσης Paths (σημειώστε το πληθυντικό) :

Path p1 = Paths.get("/tmp/foo");
Path p2 = Paths.get(args[0]);
Path p3 = Paths.get(URI.create("file:///Users/joe/FileTest.java"));

Η μέθοδος Paths.get(“/users/sally”) είναι συντομογραφία για τον παρακάτω κώδικα :

Path p4 = FileSystems.getDefault().getPath("/users/sally");

Το ακόλουθο παράδειγμα δημιουργεί το path <home directory>/logs/foo.log.

Path p5 = Paths.get(System.getProperty("user.home"),"logs", "foo.log");

Εάν το home dir του χρήστη αντιστοιχεί στο /home/joe το πλήρες path θα αντιστοιχεί στο /home/joe/logs/foo.log, ενώ εάν το home dir του χρήστη αντιστοιχεί στο c:\users\joe το πλήρες path θα αντιστοιχεί στο c:\users\joe\logs\foo.log.

Ανάκτηση πληροφοριών σχετικά με ένα Path

Μπορείτε να σκεφτείτε το Path ως την αποθήκευση αυτών των στοιχείων ονομάτων σαν μια ακολουθία. Το υψηλότερο στοιχείο στην δομή του καταλόγου θα βρίσκεται στη θέση 0 και το χαμηλότερο στοιχείο στην δομή διευθύνσεων θα βρίσκεται στη θέση [n-1] (όπου n είναι ο αριθμός των στοιχείων ονομάτων στο Path). Η κλάση Path παρέχει μεθόδους για την ανάκτηση μεμονωμένων στοιχείων ή τμημάτων του Path

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

Το ακόλουθο απόσπασμα κώδικα ορίζει ένα παράδειγμα Path και στη συνέχεια, επικαλείται διάφορες μεθόδους για να λάβει πληροφορίες σχετικά με τη διαδρομή:

// None of these methods requires that the file corresponding
// to the Path exists.
// Microsoft Windows syntax
Path path = Paths.get("C:\\home\\joe\\foo");
 
// GNU/Linux 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());

Έξοδος σε λειτουργικό σύστημα Microsoft Windows :

C:\home\joe\foo 
foo 
home 
3  
home\joe 
\home\joe 
C:\

Έξοδος σε λειτουργικό σύστημα GNU/Linux :

/home/joe/foo
foo 
home 
3  
home/joe 
/home/joe 
/

Το προηγούμενο παράδειγμα δείχνει την έξοδο για ένα απόλυτο μονοπάτι. Στο ακόλουθο παράδειγμα, καθορίζεται ένα σχετικό μονοπάτι :

// GNU/Linux syntax
Path path = Paths.get("sally/bar");

or

// Microsoft Windows syntax
Path path = Paths.get("sally\\bar");

Αφαίρεση περιττών κομματιών από ένα Path

Πολλά συστήματα αρχείων χρησιμοποιούν τον συμβολισμό “.” για να υποδηλώσουν την τρέχουσα διεύθυνση και τον “..” για να υποδηλώσουν τη γονική διεύθυνση. Μπορεί να έχουμε μια κατάσταση όπου ένα μονοπάτι περιέχει περιττές πληροφορίες καταλόγου. Ίσως ένας server έχει ρυθμιστεί ώστε να αποθηκεύσει τα log αρχεία του στην “/ dir / logs /”. διεύθυνση, και θέλουμε να διαγράψουμε το τελικό σύμβολο “/”. από το μονοπάτι.

Τα παραδείγματα που ακολουθούν περιλαμβάνουν και τα δύο περιττά κομμάτια :

/home/./joe/foo
/home/sally/../joe/foo

Η μέθοδος normalize αφαιρεί τυχόν περιττά στοιχεία, το οποίο περιλαμβάνουν οποιεσδήποτε περιπτώσεις “.” ή “directory/..”. Και τα δύο προηγούμενα παραδείγματα ομαλοποίηση στο / home / Joe / foo.

Είναι σημαντικό να σημειωθεί ότι η normalize δεν ελέγχει στο σύστημα αρχείων, όταν “καθαρίζει” το μονοπάτι. Πρόκειται για μία εντελώς συντακτική λειτουργία. Στο δεύτερο παράδειγμα, αν το sally ήταν ένα symbolic link, αφαιρώντας το sally/.. θα μπορούσε να οδηγήσει σε ένα Path που δεν εντοπίζει πια το ζητούμενο αρχείο.

Για να “καθαρίσουμε” ένα μονοπάτι, διασφαλίζοντας παράλληλα ότι το αποτέλεσμα εντοπίζει το σωστό αρχείο, μπορούμε να χρησιμοποιήσουμε τη μέθοδο toRealPath. Αυτή η μέθοδος περιγράφεται στην παρακάτω.

Μετατροπή ενός Path

Μπορούμε να χρησιμοποιήσουμε τρεις μεθόδους για να μετατρέψουμε ένα Path. Αν χρειαστεί να μετατρέψουμε το μονοπάτι σε ένα string που μπορεί να ανοίξει από ένα browser, μπορούμε να χρησιμοποιήσουμε την μέθοδο toUri. Για παράδειγμα:

Path p1 = Paths.get("/home/logfile");
// Result is file:///home/logfile
System.out.format("%s%n", p1.toUri());

Η μέθοδος toAbsolutePath μετατρέπει ένα μονοπάτι σε ένα απόλυτο μονοπάτι. Αν το μονοπάτι είναι ήδη απόλυτο, επιστρέφει το ίδιο αντικείμενο Path. Η μέθοδος toAbsolutePath μπορεί να είναι πολύ χρήσιμη κατά την επεξεργασία ονομάτων αρχείων εισαγόμενα από τον χρήστη . Για παράδειγμα:

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

Η μέθοδος toAbsolutePath μετατρέπει την είσοδο του χρήστη και επιστρέφει ένα Path που επιστρέφει χρήσιμες τιμές όταν ερωτηθούν. Το αρχείο δεν είναι απαραίτητο να υπάρχει για να λειτουργήσει αυτή η μέθοδος.

Η μέθοδος toRealPath επιστρέφει την πραγματική πορεία ενός υπάρχοντος αρχείου. Επίσης, εκτελεί πολλές λειτουργίες σε μία:

  • Αν περνά σε αυτή τη μέθοδο η τιμή true και το σύστημα αρχείων υποστηρίζει symbolic links, τότε επιλύει όλα τα symbolic links στο μονοπάτι.
  • Αν το Path είναι σχετικό, επιστρέφει ένα απόλυτο Path.
  • Αν το Path περιλαμβάνει τυχόν περιττά στοιχεία, επιστρέφει ένα μονοπάτι χωρίς αυτά τα στοιχεία.
java/class_path.1486459430.txt.gz · Last modified: 2017/02/07 09:23 by gthanos