|
|
|
java:class_file [2016/03/30 10:22] gthanos |
java:class_file [2020/03/09 20:31] |
| ====== Η κλάση File ====== | |
| |
| Η κλάση [[https://docs.oracle.com/javase/7/docs/api/java/io/File.html|java.io.File]] απεικονίζει ένα αρχείο ή directory από το λειτουργικό σας σύστημα. Μέσω της κλάσης File μπορείτε να έχετε πρόσβαση στα αρχεία του συστήματος σας, να εξετάσετε κατά πόσο ένα αρχείο είναι directory ή απλό αρχείο, να δείτε τα περιεχόμενα ενός directory, να εξετάσετε εάν ένα αρχείο είναι εκτελέσιμο ή όχι και άλλα. | |
| |
| Προκειμένου να φτιάξετε ένα αντικείμενο της κλάσης File αρκεί να χρησιμοποιήσετε έναν από τους κατασκευαστές της κλάσης File. Ο πιο απλός κατασκευαστής της κλάσης είναι ο παρακάτω, ο οποίος λαμβάνει ως όρισμα ένα String που περιέχει το path ενός αρχείο και δημιουργεί το αντικείμενο της κλάσης File. | |
| <code java> | |
| public File(String pathname) | |
| </code> | |
| |
| Για παράδειγμα, αν θέλετε να δημιουργήσετε ένα αντικείμενο File για το τρέχον Directory αρκεί να γράψετε | |
| <code java> | |
| File currentDir = new File("."); | |
| </code> | |
| |
| |
| Αν θέλετε να δημιουργήσετε ένα αντικείμενο File για το αρχείο **myFavoritSong.mp3** που βρίσκεται μέσα στον κατάλογο **C:\Users\<YourUsername>\Music\** (αντικαταστήστε το **<YourUsername**> με το username σας στο λειτουργικό σύστημα Windows), τότε αρκεί να γράψετε | |
| <code java> | |
| File favoritSong = new File("C:\\Users\\<YourUsername>\\Music\\myFavoritSong.mp3"); | |
| </code> | |
| |
| ===== Μέθοδοι της κλάσης File ===== | |
| |
| Βασικές μέθοδοι της κλάσης File είναι οι παρακάτω: | |
| * ''public boolean canExecute()'' : Ελέγχει εάν το αρχείο είναι εκτελέσιμο. | |
| * ''public boolean canRead()'' : Ελέγχει εάν μπορούμε να ανοίξουμε το αρχείο για διάβασμα. | |
| * ''public boolean canWrite()'' : Ελέγχει εάν μπορούμε να ανοίξουμε το αρχείο για γράψιμο. | |
| * ''public boolean createNewFile()'' : Δημιουργεί ένα νέο κενό αρχείο στο filesystem, εφόσον το αντικείμενο File δεν αντιστοιχεί σε υπαρκτό αρχείο. | |
| * ''public boolean delete()'' : Επιχειρεί να διαγράψει το αρχείο ή κατάλογο. Επιστρέφει **true** εάν επέτυχε η διαγραφή, διαφορετικά **false**. | |
| * ''public boolean exists()'' : Ελέγχει εάν το συγκεκριμένο αντικείμενο αντικατοπτρίζει ένα πραγματικό αρχείο ή κατάλογο στο filesystem. | |
| * ''public String getAbsolutePath()'' : Επιστρέφει το απόλυτο path για ένα υπαρκτό αρχείο ή κατάλογο. Η συγκεκριμένη μέθοδος έχει νόημα εάν έχετε δημιουργήσει το αντικείμενο χρησιμοποιώντας ένα σχετικό path αντί για απόλυτο. | |
| * ''public String getName()'' : Επιστρέφει μόνο το όνομα του αρχείου ή καταλόγου του. | |
| * ''public boolean isDirectory()'' : Ελέγχει εάν το συγκεκριμένο αντικείμενο αντιπροσωπεύει ένα directory. | |
| * ''public boolean isFile()'' : Ελέγχει ένα το συγκεκριμένο αντικείμενο είναι απλό αρχείο (όχι directory, , όχι ειδικό αρχείο). | |
| * ''public long length()'' : Επιστρέφει το μήκος του αρχείου. | |
| * ''public String[] list()'' : Επιστρέφει ένα πίνακα από Strings που περιέχει τα ονόματα των περιεχόμενων αρχείων. Η συγκεκριμένη μέθοδος έχει νόημα μόνο εάν το αντικείμενο File αντιπροσωπεύει ένα directory. Διαφορετικά επιστρέφει **null**. | |
| * ''public File[] listFiles()'' : Επιστρέφει ένα πίνακα από Files που περιέχει τα αντικείμενα File για τα περιεχόμενα αρχεία. Η συγκεκριμένη μέθοδος έχει νόημα μόνο εάν το αντικείμενο File αντιπροσωπεύει ένα directory. Διαφορετικά επιστρέφει **null**. | |
| * ''public boolean mkdir()'' : Δημιουργεί ένα νέο κενό directory στο filesystem, εφόσον δεν υπάρχει. Επιστρέφει **true** εάν το directory δημιουργηθεί επιτυχώς, διαφορετικά επιστρέφει **false**. | |
| | |
| ===== Παραδείγματα ===== | |
| |
| ==== Παράδειγμα 1 ==== | |
| |
| Με χρήση της κλάσης [[https://docs.oracle.com/javase/7/docs/api/java/io/File.html|java.io.File]] δημιουργήστε ένα πρόγραμμα που εκτυπώνει μία λίστα με τα περιεχόμενα των αρχείων του τρέχοντος Directory (ένα σε κάθε γραμμή). | |
| <code java CurrentDirList.java> | |
| import java.io.File; | |
| |
| public class CurrentDirList { | |
| public static void main(String []args) { | |
| File currentDir = new File("."); | |
| File files[] = currentDir.listFiles(); | |
| for(File f : files) { | |
| System.out.println(f.getName()); | |
| } | |
| } | |
| } | |
| </code> | |
| |
| Στη συνέχεια εξελίσσουμε το πρόγραμμα ώστε: | |
| - να λαμβάνει το όνομα του directory από την γραμμή εντολών | |
| - να εκτυπώνει μόνο αρχεία με κατάληξη **.java**. | |
| |
| <code java CurrentDirList.java> | |
| import java.io.File; | |
| |
| public class CurrentDirList { | |
| public static void main(String []args) { | |
| if( args.length == 0 ) { | |
| System.out.println("Insufficient number of arguments!"); | |
| return; | |
| } | |
| File currentDir = new File(args[0]); | |
| File files[] = currentDir.listFiles(); | |
| for(File f : files) { | |
| if( f.isFile() && f.getName().substring(f.getName().length()-5).equals(".java") ) { | |
| System.out.println(f.getName()); | |
| } | |
| } | |
| } | |
| } | |
| </code> | |
| |
| <WRAP tip 80% center round> | |
| Παρατηρήστε ότι είναι απαραίτητη η χρήση της εντολής **import java.io.File;** στην αρχή του αρχείου. | |
| </WRAP> | |
| |
| ==== Παράδειγμα 2 ==== | |
| |
| Με χρήση της κλάσης [[https://docs.oracle.com/javase/7/docs/api/java/io/File.html|java.io.File]] δημιουργήστε ένα πρόγραμμα που λαμβάνει το όνομα ενός αρχείου από την γραμμή εντολών και εάν δεν υπάρχει το δημιουργεί στο τρέχον directory. | |
| |
| <code java CreateEmptyFile.java> | |
| |
| import java.io.File; | |
| |
| public class CreateEmptyFile { | |
| public static void main(String args[]) { | |
| if( args.length == 0 ) { | |
| System.out.println("Insufficient number of arguments!"); | |
| return; | |
| } | |
| File f = new File("./"+args[0]); | |
| if( !f.exists() ) { | |
| try { | |
| f.createNewFile(); | |
| } catch( Exception ex ) { | |
| ex.printStackTrace(); | |
| } | |
| } | |
| } | |
| } | |
| </code> | |
| |
| <WRAP tip 80% center round> | |
| Με βάση το παραπάνω πρόγραμμα δημιουργήστε μία παραλλαγή του που να δημιουργεί ένα directory με το όνομα που δίνετε από την γραμμή εντολών αντί για ένα κανονικό αρχείο. | |
| </WRAP> | |
| |
| |
| |