1 Εισαγωγή στα Streams Υπάρχουν πάνω από 60 κλάσεις για input/output στο πακέτο Υπάρχουν πάνω από 60 κλάσεις για input/output στο πακέτο java.io.*; java.io.*; Ενα αντικείμενο από το οποίο μπορεί να διαβαστεί μια ακολουθία Ενα αντικείμενο από το οποίο μπορεί να διαβαστεί μια ακολουθία bytes λέγεται input stream και ένα αντικείμενο στο οποίο μπορεί bytes λέγεται input stream και ένα αντικείμενο στο οποίο μπορεί να γραφτεί μια ακολουθία bytes λέγεται output stream. να γραφτεί μια ακολουθία bytes λέγεται output stream. Στη java υπάρχουν κλάσεις InputStream και OutputStream για Στη java υπάρχουν κλάσεις InputStream και OutputStream για διάβασμα ή γράψιμο μη χαρακτηρικών δεδομένων (bytes) και διάβασμα ή γράψιμο μη χαρακτηρικών δεδομένων (bytes) και Reader και Writer κλάσεις για διάβασμα ή γράψιμο χαρακτήρων Reader και Writer κλάσεις για διάβασμα ή γράψιμο χαρακτήρων (για Unicode χαρακτήρες). (για Unicode χαρακτήρες). Οι παραπάνω κλάσεις διαθέτουν abstract μεθόδους για Οι παραπάνω κλάσεις διαθέτουν abstract μεθόδους για διάβασμα/ γράψιμο read και write. διάβασμα/ γράψιμο read και write. abstract int read(), abstract void write(int b) abstract int read(), abstract void write(int b)
2 Streams Εισόδου – Εξόδου ( I ) Οι κλάσεις αυτές όμως δε διαθέτουν όμως μεθόδους για διάβασμα/γράψιμο αριθμών ή strings. Ετσι χρησιμοποιούνται οι κλάσεις DataInputStream, DataOutputSteeam οι οποίες χειρίζονται βασικούς τύπους Οι κλάσεις αυτές όμως δε διαθέτουν όμως μεθόδους για διάβασμα/γράψιμο αριθμών ή strings. Ετσι χρησιμοποιούνται οι κλάσεις DataInputStream, DataOutputSteeam οι οποίες χειρίζονται βασικούς τύπους π.χ. int, double, float. π.χ. int, double, float. void writeBoolean(boolean v), boolean readBoolean(), void writeBoolean(boolean v), boolean readBoolean(), void writeChar(char ch), char readChar(), void writeChar(char ch), char readChar(), void writeDouble(double d), double readDouble(), void writeDouble(double d), double readDouble(), void wrietInt(int I), int readInt() etc void wrietInt(int I), int readInt() etc Υπάρχουν διάφορες άλλες κλάσεις οι οποίες προσφέρουν σε Υπάρχουν διάφορες άλλες κλάσεις οι οποίες προσφέρουν σε συνδυασμό με τις προηγούμενες επί πλέον λειτουργικότητα. συνδυασμό με τις προηγούμενες επί πλέον λειτουργικότητα. Oι κλάσεις BufferedInputStream, BufferedOututStream Oι κλάσεις BufferedInputStream, BufferedOututStream προσφέρουν ενταμιευμένα Streams από bytes. προσφέρουν ενταμιευμένα Streams από bytes.
3 Streams Εισόδου – Εξόδου ( II ) Oι κλάσεις FileInputStream, FileOututStream δίνουν input και output stream τα οποία διαβάζουν ή γράφουν σε αρχεία. FileInputStream(File file), FileInputStream(String name) FileInputStream(File file), FileInputStream(String name) Oι κλάσεις ZipInputStream, ZipOutputStream Oι κλάσεις ZipInputStream, ZipOutputStream γράφουν και διαβάζουν αρχεία σε ZIP compression format. γράφουν και διαβάζουν αρχεία σε ZIP compression format. ZipInputStream zin = new ZipInputStream(new FileInputStream(“x.zip”)); FileInputStream(“x.zip”)); DataInputStream din = new DataInputStream(zin); DataInputStream din = new DataInputStream(zin); αν έχει την επιθυμητή τιμή. αν έχει την επιθυμητή τιμή. PushbackInputStream pbin = new PushbackInputStream(new H κλάση PushbackInputStream εξετάζει το επόμενο byte H κλάση PushbackInputStream εξετάζει το επόμενο byte FileInputStream(“aaa.dat”)); FileInputStream(“aaa.dat”)); DataInputStream din = new DataInputStream(pbin);
4 InputStream ByteArray InputStream File InputStream Piped InputStream Filter InputStream Sequence InputStream Buffer InputStream Object InputSteam Buffered InputStream Checked InputStream Digest InputStream Inflater InputStream LineNumber InputStream PushBack InputStream DataInput Stream ObjectInput GZIP InputStream Zip InputSteam Jar InputStream DataInput DataOutput Random AccessFile
5 OutputStream ByteArray OutputStream File OutputStream Filter OutputStream Piped OutputStream Object OutputStream Buffered OutputStream Checked OutputStream Digest OutputStream Deflater OutputStreamPrintStream Data OutputStream ObjectOutput GZIP OutputStream Zip OutputSteam Jar OutputStream DataOutput DataInput Random AccessFile
6 Παράδειγμα try { FileOutputStream file = new Προσοχή!!! FileOutputStream(“text.txt”); Κάθε κλάση FileOutputStream file = new Προσοχή!!! FileOutputStream(“text.txt”); Κάθε κλάση BufferedOutputStream buff = new προσθέτει BufferedOutputStream(file); μεθόδους BufferedOutputStream buff = new προσθέτει BufferedOutputStream(file); μεθόδους DataOutputStream data = new DataOutputStream(buff); DataOutputStream data = new DataOutputStream(buff); for(int i = 0; i < 1000; i++) for(int i = 0; i < 1000; i++) data.writeInt(i); data.writeInt(i); data.close(); data.close(); } catch(IOException e) { System.out.println(“Error: “ + e.toString()); }
7 Readers και Writers ( I ) Οι κλάσεις Reader και Writer: έχουν abstract μεθόδους read και write που είναι βασισμένες σε 2-byte Unicode χαρακτήρες και write που είναι βασισμένες σε 2-byte Unicode χαρακτήρες και όχι σε single-byte χαρακτήρες. Π.χ. Το String “1234” σε και όχι σε single-byte χαρακτήρες. Π.χ. Το String “1234” σε Unicode γράφεται (hex), ενώ σε Unicode γράφεται (hex), ενώ σε ASCII γράφεται ASCII γράφεται Το πρόβλημα διορθώνουν οι κλάσεις InputStreamReader, Το πρόβλημα διορθώνουν οι κλάσεις InputStreamReader, OuputStreamWriter οι οποίες μετατρέπουν Unicode OuputStreamWriter οι οποίες μετατρέπουν Unicode χαρακτήρες σε αναπαράσταση χαρακτήρων τοπικού χαρακτήρες σε αναπαράσταση χαρακτήρων τοπικού λειτουργικού και αντίστροφα. λειτουργικού και αντίστροφα. InputStreamReader in = new InputStreamReader(System.in); InputStreamReader in = new InputStreamReader(System.in);
8 Readers και Writers ( II ) Οι κλάσεις FileReader, FileWriter χρησιμοποιούνται για Οι κλάσεις FileReader, FileWriter χρησιμοποιούνται για διάβασμα/γράψιμο σε αρχεία. διάβασμα/γράψιμο σε αρχεία. FileWriter out = new FileWriter(“output.txt”); Ισοδύναμο με: Ισοδύναμο με: OutputStreamWriter out = new OutputStreamWriter( OutputStreamWriter out = new OutputStreamWriter( new FileOutputStream(“output.txt”)); new FileOutputStream(“output.txt”)); FileReader in = new FileReader(“input.txt”); Ισοδύναμο με: InputSteamReader in = new InputStreamReader(new FileInputStream(“input.txt”)); FileInputStream(“input.txt”));
9 Reader Buffered Reader CharArray Reader Filter Reader StringReader Piped Reader InputSteam Reader LineNumber Reader PushBack Reader FileReader
10 Writer Buffered Writer CharArray Writer FilterWriterStringWriterPipedWriterOutputSteam Writer FileWriter PrintWriter
11 Γράψιμο Text Γράψιμο Text Η κλάση PrintWriter χρησιμοποιείται για γράψιμο text, δηλ. Η κλάση PrintWriter χρησιμοποιείται για γράψιμο text, δηλ. για γράψιμο strings και αριθμών σε text format. για γράψιμο strings και αριθμών σε text format. PrintWriter out = new PrintWriter(new FileWriter(“output.txt”)); Ισοδύναμο με: Ισοδύναμο με: PrintWriter out = new PrintWriter(new FileOutputSteam(“output.txt”)); PrintWriter out = new PrintWriter(new FileOutputSteam(“output.txt”)); out.print(“Hello”); out.print(“Hello”); double x = 3; double x = 3; out.print(x); out.print(x); out.print(‘ ‘); out.print(‘ ‘); ! Υπενθύμιση Για να γράψουμε δεδομένα σε binary format χρησιμοποιούμε DataOutputStream. binary format χρησιμοποιούμε DataOutputStream.
12 Διάβασμα Text Διάβασμα Text Δεν υπάρχει στη Java κλάση για διάβασμα ανάλογη του Δεν υπάρχει στη Java κλάση για διάβασμα ανάλογη του DataInputSteam, δηλ. που να επιτρέπει να διαβάζονται data DataInputSteam, δηλ. που να επιτρέπει να διαβάζονται data σε text format. Το πρόβλημα λύνει η BufferedInput κλάση, σε text format. Το πρόβλημα λύνει η BufferedInput κλάση, η οποία έχει readLine() μέθοδο που διαβάζει γραμμή σε text. η οποία έχει readLine() μέθοδο που διαβάζει γραμμή σε text. για γράψιμο strings και αριθμών σε text format. για γράψιμο strings και αριθμών σε text format. BufferedReader in = new BufferedReader(new BufferedReader in = new BufferedReader(newFileReader(“hello.txt”)); String line; String line; while (( line = in.readLine() != null) { ……… } while (( line = in.readLine() != null) { ……… } BufferedReader in2 = new BufferedReader(new BufferedReader in2 = new BufferedReader(newInputStreamReader(System.in));
13 Η κλάση File Ένα αντικείμενο File αντιπροσωπεύει ένα αρχείο ή ένα φάκελλο (directory). Ο κατασκευαστής παίρνει όρισμα το όνομα του αρχείου. File test = new File (“test.txt”); Η java παρέχει ένα σύνολο μεθόδων: boolean exists(), boolean isDirectory(), boolean isFile(), String getName(),String getPath(), boolean mkdir(), boolean canRead(), boolean canWrite(), boolean exists(), long length(), boolean delete()…