This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
java:read_from_file [2016/03/18 22:06] gthanos [Διαβάζοντας γραμμή-γραμμή] |
java:read_from_file [2016/03/19 06:24] gthanos [Παράδειγμα ανάγνωσης με χρήση της Scanner] |
||
---|---|---|---|
Line 36: | Line 36: | ||
===== Διαβάζοντας γραμμή-γραμμή ===== | ===== Διαβάζοντας γραμμή-γραμμή ===== | ||
- | Ό πιο απλός τρόπος ανάγνωσης αρχείων κειμένου είναι το διάβασμα κάθε γραμμής ξεχωριστά και στη συνέχει η επεξεργασία της γραμμής, ώστε να εξάγουμε τα αποτελέσματα που θέλουμε. | + | Ό πιο απλός τρόπος ανάγνωσης αρχείων κειμένου είναι το διάβασμα κάθε γραμμής ξεχωριστά και στη συνέχει η επεξεργασία της γραμμής, ώστε να εξάγουμε τα αποτελέσματα που θέλουμε. Προκειμένου να επιτύχετε το διάβασμα ενός αρχείου γραμμή-γραμμή μπορείτε να το κάνετε με χρήση της κλάσης [[http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html|java.io.BufferedReader]], όπως φαίνεται παρακάτω: |
<code java ReadLineByLine.java> | <code java ReadLineByLine.java> | ||
Line 51: | Line 51: | ||
numbers[i++] = createTelephoneNumber(input); | numbers[i++] = createTelephoneNumber(input); | ||
} | } | ||
+ | System.out.println("-------- Telephone Numbers ---------"); | ||
for(TelephoneNumber number : numbers) { | for(TelephoneNumber number : numbers) { | ||
System.out.println(number); | System.out.println(number); | ||
Line 69: | Line 70: | ||
</code> | </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; | ||
+ | import java.io.File; | ||
+ | |||
+ | public class ReadWithScanner { | ||
+ | public static void main(String []args) { | ||
+ | String firstname=null, lastname=null, number=null; | ||
+ | int i=0; | ||
+ | TelephoneNumber numbers[] = new TelephoneNumber[5]; | ||
+ | try { | ||
+ | Scanner sc = new Scanner(new File("telephone-list.txt")); | ||
+ | | ||
+ | while( sc.hasNext() ) { | ||
+ | if( firstname == null ) | ||
+ | firstname = sc.next(); | ||
+ | if( lastname == null ) | ||
+ | lastname = sc.next(); | ||
+ | else | ||
+ | number = sc.next(); | ||
+ | |||
+ | if( lastname.charAt( lastname.length() -1 ) == ',' ) | ||
+ | lastname = lastname.substring(0, lastname.length() -1); | ||
+ | |||
+ | if( firstname != null && lastname != null && number != null) { | ||
+ | numbers[i++] = new TelephoneNumber(firstname+" "+lastname, number); | ||
+ | number = null; | ||
+ | firstname = null; | ||
+ | lastname = null; | ||
+ | } | ||
+ | } | ||
+ | } catch(Exception ex) { | ||
+ | ex.printStackTrace(); | ||
+ | } | ||
+ | for(TelephoneNumber telephoneNumber : numbers) { | ||
+ | System.out.println(telephoneNumber); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | <WRAP tip 80% center round> | ||
+ | Το παραπάνω παράδειγμα θα μπορούσατε να το εκτελέσετε διαβάζοντας από την κονσόλα, αντί να διαβάζετε από αρχείο προκειμένου να διαβάσετε από την κονσόλα θα μπορούσατε να αντικαταστήσετε την γραμμή | ||
+ | <code java> | ||
+ | Scanner sc = new Scanner(new File("telephone-list.txt")); | ||
+ | </code> | ||
+ | |||
+ | με την γραμμή | ||
+ | |||
+ | <code java> | ||
+ | Scanner sc = new Scanner(System.in); | ||
+ | </code> | ||
+ | |||
+ | </WRAP> | ||
+ | |||
+ | |||
+ | |||
+ | </WRAP> | ||