java:read_from_file

This is an old revision of the document!


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

====== Διαβάζοντας από ένα αρχείο ====== Στην προηγούμενη παράγραφο είδαμε πως μπορούμε να δημιουργήσουμε ένα αντικείμενο της κλάσης File, αλλά και πως μπορούμε να πλοηγηθούμε στους καταλόγους του filesystem του υπολογιστή μας. Στην παρούσα σελίδα θα δούμε εναλλακτικούς τρόπους με τους οποίους μπορούμε να διαβάσουμε από ένα αρχείο κειμένου. Για τα παραδείγματα που ακολουθούν υποθέστε ότι καλούμαστε να διαβάσουμε το παρακάτω αρχείο που περιέχει τα ονόματα και τα τηλέφωνα ενός τηλεφωνικού καταλόγου. <code txt telephone-list.txt> John Smith, 6944854544 Robert Parson, 6978456123 Nick Carlson, 6982147852 Barbara Miller, 6978852456 Max Taylor, 6936785412 </code> Τα οποία θέλουμε να τα αποθηκεύσουμε σε ένα πίνακα από αντικείμενα της παρακάτω κλάσης TelephoneNumber <code java TelephoneNumber.java> public class TelephoneNumber { private String name; private String number; public TelephoneNumber(String newName, String newNumber) { name = newName; number = newNumber; } public String getName() { return name; } public String getNumber() { return number; } public void setName(String newName) { name = newName; } public void setNumber(String newNumber) { number = newNumber; } public String toString() { return "Name: "+name+", Number: "+number; } } </code> ===== Διαβάζοντας γραμμή-γραμμή ===== Ό πιο απλός τρόπος ανάγνωσης αρχείων κειμένου είναι το διάβασμα κάθε γραμμής ξεχωριστά και στη συνέχει η επεξεργασία της γραμμής, ώστε να εξάγουμε τα αποτελέσματα που θέλουμε. Προκειμένου να επιτύχετε το διάβασμα ενός αρχείου γραμμή-γραμμή μπορείτε να το κάνετε με χρήση της κλάσης [[http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html|java.io.BufferedReader]], όπως φαίνεται παρακάτω: <code java ReadLineByLine.java> import java.io.*; public class ReadLineByLine { public static void main(String []args) { try { String input; int i=0; TelephoneNumber [] numbers = new TelephoneNumber[5]; BufferedReader in = new BufferedReader(new FileReader("telephone-list.txt")); while( (input = in.readLine()) != null && input.length() > 0 ) { numbers[i++] = createTelephoneNumber(input); } System.out.println("-------- Telephone Numbers ---------"); for(TelephoneNumber number : numbers) { System.out.println(number); } } catch( IOException ex ) { ex.printStackTrace(); } } public static TelephoneNumber createTelephoneNumber(String inputLine) { int commaPosition = inputLine.indexOf(","); String name = inputLine.substring(0, commaPosition).trim(); String telephone = inputLine.substring( commaPosition+1 ).trim(); TelephoneNumber t = new TelephoneNumber(name, telephone); return t; } } </code> <WRAP tip 80% center round> H δήλωση της μορφής <code java> try { // some code here } catch(Exception ex) { ex.printStackTrace(); } </code> δηλώνει την πιθανή ύπαρξη ενός exception στον κώδικα που περιέχεται μέσα στο try μπλοκ. Τη χρήση των exceptions θα την δούμε αναλυτικά στη συνέχεια. </WRAP> ===== Χρησιμοποιώντας την κλάση Scanner ===== Εκτός από την δυνατότητα που έχετε να διαβάζετε γραμμή-γραμμή η Java σας δίνει την επιπλέον δυνατότητα να διαβάζετε συγκεκριμένους τύπους δεδομένων μέσω της κλάσης [[http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html|java.util.Scanner]]. Η κλάση Scanner σας δίνει την δυνατότητα να διαβάζετε από ένα αρχείο ή από την κονσόλα τα δεδομένα σας είτε ως //primitive// τύπους δεδομένων (int, byte, long, double κλπ), είτε ως String. Επίσης σας δίνει την δυνατότητα να διαβάσετε μία ολόκληρη γραμμή, όπως κάνατε και με χρήση της κλάσης [[http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html|java.io.BufferedReader]]. Οι μέθοδοι της κλάσης //Scanner// έχουν συνοπτικά ως εξής: **Κατασκευαστές** * ''public Scanner(File file)'' : Δημιουργεί ένα νέο αντικείμενο της κλάσης Scanner προκειμένου να διαβάσουμε από το αρχείο //file//. * ''public Scanner(InputStream source)'' : Δημιουργεί ένα νέο αντικείμενο της κλάσης Scanner προκειμένου να διαβάσουμε από ένα [[http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html|java.io.InputStream]] //source//. Ο συγκεκριμένος κατασκευαστής είναι χρήσιμος εφόσον θέλουμε να διαβάσουμε από την κονσόλα. Ένα αρχείο μπορείτε να το ανοίξετε είτε με χρήση της κλάσης File που είδαμε νωρίτερα είτε με χρήση της κλάσης [[http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html|java.io.InputStream]], προκειμένου να χρησιμοποιήσετε την κλάση Scanner. Δείτε τα παραδείγματα χρήσης που ακολουθούν. **Μέθοδοι** * ''public void close()'' : Κλείνει το Scanner. Μετά την κλήση της close δεν μπορείτε να διαβάσετε τίποτα. * ''public boolean hasNext()'' : Επιστρέφει true εάν υπάρχει κάτι για διάβασμα. * ''public String next()'' : Επιστρέφει το επόμενο String για διάβασμα. Το επόμενο String οριοθετείται μέχρι να βρεθεί κενό ή χαρακτήρας αλλαγής γραμμής. * ''public String nextLine()'' : Επιστρέφει την επόμενη γραμμή. Το τέλος της γραμμής οριοθετείται από την ύπαρξη του χαρακτήρα αλλαγής γραμμής newline ''\n'' ή carriege return ''\r'' ή συνδυασμό και των δύο. * ''public boolean hasNextInt()'' : Επιστρέφει true εάν υπάρχει κάτι για διάβασμα το οποίο μπορεί να μεταφραστεί ως ακέραιος. Εάν επιστρέψει true, διαβάζουμε με την μέθοδο nextInt(). * ''public int nextInt()'' : Διαβάζει και επιστρέφει έναν ακέραιο αριθμό. * ''public boolean hasNextDouble()'' : Επιστρέφει true εάν υπάρχει κάτι για διάβασμα το οποίο μπορεί να μεταφραστεί ως double. Εάν επιστρέψει true, διαβάζουμε με την μέθοδο nextDouble(). * ''public int nextDouble()'' : Διαβάζει και επιστρέφει έναν αριθμό double. * ''public boolean hasNextBoolean()'' : Επιστρέφει true εάν υπάρχει κάτι για διάβασμα το οποίο μπορεί να μεταφραστεί ως boolean. Εάν επιστρέψει true, διαβάζουμε με την μέθοδο nextBoolean(). * ''public int nextBoolean()'' : Διαβάζει και επιστρέφει μία τιμή boolean. ==== Παράδειγμα ανάγνωσης με χρήση της Scanner ==== <code java ReadWithScanner.java> import java.util.Scanner; public class ReadWithScanner { public static void main(String []args) { String name=null, number=null; int i=0; TelephoneNumber numbers[] = new TelephoneNumber[5]; try { Scanner sc = new Scanner("telephone-list.txt"); while( sc.hasNext() ) { if( name == null ) name = sc.next(); else number = sc.next(); if( name != null && number != null) { numbers[i++] = new TelephoneNumber(name, number); number = null; name = null; } } }catch(Exception ex) { ex.printStackTrace(); } for(TelephoneNumber number : numbers) { System.out.println(number); } } } </code>

java/read_from_file.1458367731.txt.gz · Last modified: 2016/03/19 06:08 by gthanos