Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 1 Week 9: Input / Output Εβδομάδα 8: Είσοδος / Έξοδος [Input / Output]

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Τύποι δεδομένων και τελεστές,
Advertisements

Επιμορφωτής: Ονομ/νυμο Επιμορφωτή
Εισαγωγικές έννοιες πληροφορικής
POINTERS, AGGREGATION, COMPOSITION. POINTERS TO OBJECTS.
Το υλικό του Υπολογιστή
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα.
ΘΕΩΡΙΑ ΔΙΑΛΕΞΗ 4 Αριθμητικές εκφράσεις και πράξεις Εντολές ανάθεσης
Κεφάλαιο 6 Threads. 2 Στον παραδοσιακό προγραμματισμό όταν ένα πρόγραμμα εκτελείται ονομάζεται process (διεργασία) και οι εντολές του εκτελούνται σειριακά.
Εισαγωγή στον Προγραμματισμό, Αντώνιος Συμβώνης, ΣΕΜΦΕ, ΕΜΠ, Slide 1 Εβδομάδα 9: Διανύσματα και λίστες.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Εισαγωγή στον Προγραμματισμό, Αντώνιος Συμβώνης, ΣΕΜΦΕ, ΕΜΠ, Slide 1 Εβδομάδα 3: Υλοποίηση μεθόδων.
Το εσωτερικό του Υπολογιστή
Φροντηστήριο Διαχείριση Περιεχομένου Παγκόσμιου Ιστού και Γλωσσικά Eργαλεία.
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Φροντιστήρια Εισηγητής: Σπύρος Αργυρόπουλος Μέλος ΕΤΕΠ Εργαστήριο Προγραμματισμού & Τεχνολογίας Ευφυών Συστημάτων.
Περίληψη Αρχιτεκτονική Μικροεπεξεργαστών MIPS-32
Προγραμματισμός PASCAL Πληροφορική Γ' Λυκείου μέρος γ
Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 1 Week 11: Intro to Applets Εβδομάδα 11: Εισαγωγή στα Applets.
Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 1 Week 6: Java Collections Εβδομάδα 6: Συλλογές δεδομένων στην Java.
Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 1 Week 10: Graphical User Interfaces Εβδομάδα 10: Εισαγωγή στα Γραφικά Περιβάλλοντα.
Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 1 Εβδομάδα 2: Υπο-τύποι και πολυμορφισμός [sub-typing and polymorphism]
Αντικειμενοστρεφής Προγραμματισμός, Αντώνιος Συμβώνης, Πανεπιστήμιο Ιωαννίνων, Slide 1 Week 13: Review Εβδομάδα 13: Ανασκόπηση.
Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 1 Week 4: Exceptions Εβδομάδα 4: Εξαιρέσεις [Exceptions]
Αντικείμενα, Κλάσεις και Μέθοδοι
Εισαγωγή στον Προγραμματισμό, Αντώνιος Συμβώνης, ΣΕΜΦΕ, ΕΜΠ, Slide 1 Εβδομάδα 7: Συμβολοσειρές.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου.
Εργασία Η υλοποίηση του αλγορίθμου συγχώνευσης θα πρέπει να χρησιμοποιεί την ιδέα των ροών (streams). Θα πρέπει να υπάρχουν δύο διαφορετικά είδη.
Προγραμματισμός ΙΙ Διάλεξη #7: Περισσότερες Δομές Ελέγχου Δρ. Νικ. Λιόλιος.
Προγραμματισμός ΙΙ Διάλεξη #6: Απλές Δομές Ελέγχου Δρ. Νικ. Λιόλιος.
Ολυμπιάδα Πληροφορικής
Ολυμπιάδα Πληροφορικής
Δομές Δεδομένων 1 Στοίβα. Δομές Δεδομένων 2 Στοίβα (stack)  Δομή τύπου LIFO: Last In - First Out (τελευταία εισαγωγή – πρώτη εξαγωγή)  Περιορισμένος.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java II.
Ο ΗΛΕΚΤΡΟΝΙΚΟΣ ΥΠΟΛΟΓΙΣΤΗΣ
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΙΑΔΙΚΑΣΤΙΚΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ – ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ.
Μοντέλα Συστημάτων Παρουσιάσεις των συστημάτων των οποίων οι απαιτήσεις αναλύονται.
Προγραμματισμός ΙΙ Διάλεξη #5: Εντολές Ανάθεσης Εντολές Συνθήκης Δρ. Νικ. Λιόλιος.
Εισαγωγή στον Προγραμματισμό, Αντώνιος Συμβώνης, ΣΕΜΦΕ, ΕΜΠ, Slide 1 Εβδομάδα 11: Εκτέλεση Java χωρίς το BlueJ.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Κληρονομικότητα.
Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 1 Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής (Αντικειμενοστρεφής Προγραμματισμός)
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές.
1 Εισαγωγή στα Streams Υπάρχουν πάνω από 60 κλάσεις για input/output στο πακέτο Υπάρχουν πάνω από 60 κλάσεις για input/output στο πακέτο java.io.*; java.io.*;
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αρχεία.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός – Αφηρημένες κλάσεις Interfaces (διεπαφές)
Δρ. Μαρία Ι. Ανδρέου Εισαγωγή στον Αντικειμενόστρεφη Προγραμματισμό (Object-Oriented Programming) Streams and Files.
ΟΣΣ Δεκεμβρίου 2004 Σχεδιασμός Λογισμικού Γλώσσες Προγραμματισμού ΙΙ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ.
Τμήμα Πληροφορικής και Τηλεπικοινωνιών
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές.
Threads Στον παραδοσιακό προγραμματισμό όταν ένα πρόγραμμα εκτελείται ονομάζεται process (διεργασία) και οι εντολές του εκτελούνται σειριακά η μία μετά.
Streams Streams: κανάλια ροής δεδομένων Κανάλια εισόδου: ανάγνωση δεδομένων Κανάλια εξόδου: αποστολή δεδομένων Συνήθεις πηγές και προορισμοί δεδομένων:
Streams, Sockets & I/O Θ. Βαρβαρίγου Καθηγ. ΕΜΠ Τηλ
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης ΗΥ -150 Προγραμματισμός Αρχεία.
ΗΥ150 – ΠρογραμματισμόςΞ. Ζαμπούλης ΗΥ-150 Προγραμματισμός Αρχεία.
Κεφάλαιο 4 Εξαιρέσεις. Όταν σε ένα πρόγραμμα συμβεί κάποιο λάθος, ο κώδικας εγείρει (throw) μία εξαίρεση. Στη Java oι εξαιρέσεις εκπροσωπούνται από αντικείμενα.
Κεφάλαιο 3 Τύποι Δεδομένων - Τελεστές. Πρωτογενείς τύποι δεδομένων: int, float, double, chars ΤύποςΌνομαΜέγεθος byte 8-bit signed, short 16-bit.
Εισαγωγή στη JAVΑ (μέρος Β’) Βασίλης Παπαταξιάρχης Μάθημα: Αντικειμενοστραφής Προγραμματισμός Διδάσκουσα: Ιζαμπώ Καράλη Τμήμα Πληροφορικής.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Ειδικά Θέματα στον Προγραμματισμό Υπολογιστών
Εισαγωγή στον Προγ/μό Η/Υ
Αντικειμενοστραφής Προγραμματισμός ΙΙ
Εργαστηριακό σεμινάριο Χειμερινό εξάμηνο
Εισαγωγή στον Προγ/μό Υπολογιστών
ΜΕΤΑΒΛΗΤΕΣ-ΣΤΑΘΕΡΕΣ -ΕΚΦΡΑΣΕΙΣ
Κεφάλαιο 10 Streams.
Ειδικά Θέματα στον προγραμματισμό Υπολογιστών
Διάλεξη #10: Εκτέλεση Java χωρίς το BlueJ
Week 9: Input / Output Διάλεξη #16: Είσοδος / Έξοδος [Input / Output]
Εξαιρέσεις [Exceptions]
Μεταγράφημα παρουσίασης:

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 1 Week 9: Input / Output Εβδομάδα 8: Είσοδος / Έξοδος [Input / Output]

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 2 Μηχανισμοί εισόδου/εξόδου [I/O mechanisms] Όλα τα προγράμματα χρειάζονται είσοδο/έξοδο για να επικοινωνούν με το περιβάλλον τους. Η είσοδος/έξοδος γίνεται μέσω κειμένου, γραφικών, αισθητήρων, εξωτερικών συσκευών, κλπ. Για προσωπικούς υπολογιστές: οθόνη, πληκτρολόγιο, ποντίκι, δίκτυο, σύστημα αρχείων. Για εμφυτευμένα [embedded] υπολογιστικά συστήματα: αισθητήρες, άλλοι μηχανισμοί.

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 3 Μηχανισμοί εξόδου Αποτελέσματα μεθόδων (BlueJ) Κείμενο σε οθόνη, εκτυπωτή, κλπ. Στοιχεία [data] σε αρχείο Στοιχεία προς άλλα προγράμματα, δίκτυο, κλπ. Παράθυρα, γραφικά (GUI)

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 4 Μηχανισμοί εισόδου Παράμετροι μεθόδων (BlueJ) Παράμετροι γραμμής εντολών [command line] Κείμενο από πληκτρολόγιο Στοιχεία [data] από αρχεία Στοιχεία από προγράμματα, το δίκτυο, κλπ. Είσοδος από ΓΠΕ [GUI] (δράσεις ποντικιού – πίεση πλήκτρων, επιλογή μενού, κλπ.)

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 5 Μηχανισμοί εισόδου/εξόδου [I/O] της Java Στην Java η είσοδος/έξοδος γίνεται μέσω ενός συνόλου κλάσεων Για I/O: καμία νέα δομή της γλώσσας (μόνο νέες κλάσεις) Οι κλάσει παρέχουν αρκετές διαπροσωπίες προς ρεύματα [streams] και άλλες «επινοήσεις» εισόδου/εξόδου [IO concepts].

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 6 Ρεύματα [Streams] Πηγή [source] Πρόγραμμα διαβάζει Ρεύμα [stream] Προορισμός [destination] Προορισμός [destination] Πρόγραμμα γράφει [reads] [writes]

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 7 Ιδιωματισμοί Java [ java idioms] Εγγραφή Ανάγνωση Άνοιξε το ρεύμα [stream] while(περισσότερα στοιχεία) γράψε στοιχεία στο ρεύμα Κλείσε το ρεύμα Άνοιξε το ρεύμα [stream] while(περισσότερα στοιχεία) διάβασε στοιχεία από το ρεύμα Κλείσε το ρεύμα

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 8 Χαρακτήρες και Bytes Ρεύμα χαρακτήρωνΡεύμα byte Εγγραφή και ανάγνωση κειμένου Εγγραφή και ανάγνωση δυαδικών στοιχείων [binary data] (αριθμοί, εικόνες, ήχος,…...Reader,...Writer...Stream

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 9 Ρεύματα και αναγνώστες/εγγραφείς Ρεύματα [streams] –Διαβάζουν/γράφουν bytes –Μπορεί να χρησιμοποιηθούν για οποιοδήποτε τύπο δεδομένων –Χρησιμοποιούνται για αποθήκευση στοιχείων σε σειριακή μορφή ["serialisation"] Αναγνώστης/εγγραφέας [reader/writer] –Διαβάζει/γράφει χαρακτήρες –Χρησιμοποιούνται για είσοδο/έξοδο κειμένου –Εισήχθησαν στην βιβλιοθήκη πρόσφατα –Προτιμούνται για είσοδο/έξοδο κειμένου

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 10 Η ιεραρχία Stream (ελλιπής) OutputStream FileOutputStream FilterOutputStream PrintStream BufferedOutputStream PipedOutputStream (μόνο έξοδος, ελλιπής)

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 11 System.in και System.out class System { public static final PrintStream err; public static final InputStream in; public static final PrintStream out;... } Η κλάση System (για ιστορικούς λόγους) χρησιμοποιεί τις PrintStream και InputStream για I/O. Ο προτιμητέος τρόπος για είσοδο/έξοδο κειμένου είναι μέσω των «Reader/Writer» κλάσεων. System.out.println("trust no-one");

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 12 Μεθοδοι της PrintStream public void print(boolean b) public void print(char c) public void print(double d) public void print(float f) public void print(int i) public void print(long l) public void print(String s) public void print(Object o) public void println(boolean b) public void println (char c) public void println (double d) public void println (float f) public void println (int i) public void println (long l) public void println (String s) public void println (Object o)

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 13 Ανάγνωση Παράδειγμα BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try { String inputLine = reader.readLine(); } catch(IOException exc) { // an IO error occurred } Τι σημαίνουν όλα αυτά;

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 14 Απόληξη στοιχείων και επεξεργασία Ρεύματα απόληξης στοιχείων Ρεύματα επεξεργασίας [Data Sink vs Processing]

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 15 Data Sink vs Processing (2) Τα «ρεύματα απόληξης στοιχείων» [data sink streams] είναι υλοποιήσεις της διαπροσωπείας “stream” οι οποίες παρέχουν πρόσβαση σε διάφορες πηγές και προορισμούς στοιχείων (αλλά δεν προσθέτουν νέες λειτουργίες). Τα «ρεύματα επεξεργασίας» [processing streams] παρέχουν επιπλέον λειτουργίες σε σχέση με υπάρχοντα ρεύματα.

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 16 Η ιεραρχία αναγνωστών/εγγραφέων (ελλιπής) Reader StringReader BufferedReader LineNumberReader FileReader InputStreamReader (μόνο ανάγνωση, ελλιπής) ρεύματα απόληξης στοιχείων ρεύματα επεξεργασίας

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 17 InputStream Αφηρημένη [abstract] κλάση Διαβάζει bytes δεδομένων από οποιοδήποτε ρεύμα εισόδου

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 18 InputStreamReader Τελική [concrete] κλάση Συνδέεται με έναν ρεύμα-υπόστρωμα τύπου InputStream Μετατρέπει bytes από το InputStream σε χαρακτήρες Κάθε λειτουργία ανάγνωσης μπορεί να προκαλέσει μία ή περισσότερες λειτουργίες ανάγνωσης του ρεύματος-υπόστρωμα InputStream

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 19 BufferedReader Τελική [concrete] κλάση Συνδέεται με έναν αναγνώστη-υπόστρωμα (συνήθως τύπου InputStreamReader ή FileReader) Προσθέτει «προσωρινή μνήμη» [buffering] για καλύτερες επιδόσεις Αποφεύγει να πραγματοποιεί μια κλήση «ανάγνωσης» για κάθε χαρακτήρα

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 20 Ανάγνωση: παράδειγμα BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try { while(true) { String line = reader.readLine(); System.out.println("the line was: " + line); } catch(IOException exc) { // an IO error occurred }

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 21 Week 9: File I/O Είσοδος/έξοδος αρχείου [File I/O]

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 22 Τεμαχισμός [tokenising] της εισόδου StringTokenizer tokenizer = new StringTokenizer(line); while(tokenizer.hasMoreTokens()) System.out.println(tokenizer.nextToken()); It's a beautiful day! It'sabeautifulday! Γραμμή εισόδου: Τεμάχια [tokens]:

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 23 Τεμαχισμός της εισόδου(2) Παράδειγμα- ο κώδικας: String s = "this is a test"; StringTokenizer st = new StringTokenizer(s); while (st.hasMoreTokens()) { println(st.nextToken()); } Τυπώνει την παρακάτω έξοδο: this is a test

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 24 Η διαπροσωπεία “Tokenizer” StringTokenizer(String str) Constructs a string tokenizer for the specified string. StringTokenizer(String str, String delim) Constructs a string tokenizer for the specified string and a given delimiter. StringTokenizer(String str, String delim, boolean returnTokens) Constructs a string tokenizer for the specified string, a given delimiter and a flag indicating whether to return the delimiter tokens. Κατασκευαστές:

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 25 Η διαπροσωπεία “Tokenizer”(2) boolean hasMoreTokens() Tests if there are more tokens available from this tokenizer's string. String nextToken() Returns the next token from this string tokenizer. int countTokens() Calculates the number of times that this tokenizer's nextToken method can be called before it generates an exception. Μέθοδοι:

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 26 Η διαπροσωπεία Reader Reader() Create a new character-stream reader whose critical sections will synchronize on the reader itself. int read() Read a single character abstract void close() Close the stream. Αφηρημένη κλάση Reader: Οι χαρακτήρες επιστρέφονται ως int (-1 εάν έχουν εξαντληθεί ) Πρέπει να μετατραπούν σε χαρακτήρες μέσω εντολής τύπου cast

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 27 Διαπροσωπεία FileReader FileReader(File file) FileReader(FileDescriptor fd) FileReader(String fileName) class FileReader (extends Reader): (Καμία νέα μέθοδος)

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 28 Παράδειγμα: copyFile public void copyFile(String fromFile, String toFile) throws IOException { File inputFile = new File(fromFile); File outputFile = new File(toFile); FileReader in = new FileReader(inputFile); FileWriter out = new FileWriter(outputFile); int ch; while ((ch = in.read()) != -1) out.write(c); in.close(); out.close(); }

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 29 Δημιουργία αναγνώστη αρχείου Ο κώδικας με τον οποίο η μέθοδος copyFile δημιουργεί έναν αναγνώστη αρχείου [ FileReader ]: inputFile = new File(fromFile); FileReader in = new FileReader(inputFile);

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 30 Η δομή του αναγνώστη αρχείων Αρχείο Κειμένου [text file] File FileReade r Σύστημα αρχείων file system (δίσκος) Δημιουργεί, ανοίγει ένα αρχείο, ελέγχει εάν ένα αρχείο υπάρχει, κλπ. Διαβάζει χαρακτήρες από ένα αρχείο read (επιστρέφει ένα χαρακτήρα ή -1 εάν βρισκόμαστε στο τέλος του αρχείου)

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 31 Μετατροπή [casting] σε χαρακτήρες public void processFile(String fileName) throws IOException { File inputFile = new File(fileName); FileReader in = new FileReader(inputFile); int ch; while ((ch = in.read()) != -1) processCharacter((char)ch); in.close(); } public void processCharacter(char aChar) {... } Αναγκαία μετατροπή!

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 32 Ανάγνωση αριθμών... int number1; int number2; boolean invalidInput = false; String line = reader.readLine(); try { number1 = Integer.parseInt(line); line = reader.readLine(); number2 = Integer.parseInt(line); } catch(NumberFormatException exc) { // input was not a valid number invalidInput = true; } Αρχείο κειμένου