| Both sides previous revision
Previous revision
Next revision
|
Previous revision
|
java:file_io_intro [2020/03/06 05:18] gthanos |
java:file_io_intro [2021/03/29 06:28] |
| ====== Είσοδος και Έξοδος του προγράμματος ====== | |
| |
| Για την ανάγνωση και εγγραφή από εξωτερικές πηγές η Java χρησιμοποιεί ροές πληροφορίας, οι οποίες ονομάζονται //streams//. Τα //streams// διακρίνονται σε [[https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html|InputStream]] για διάβασμα δεδομένων από μία πηγή και [[https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html|Output Stream]] για εγγραφή δεδομένων σε μία πηγή. Οι πηγές από τις οποίες μπορεί να διαβάσει ή στις οποίες μπορεί να γράψει ένα stream είναι πάρα πολλές. Για παράδειγμα ένα stream ανάγνωσης ή εγγραφής μπορεί να εφαρμοστεί σε αρχείο, σε ένα tcp/ip socket ή ακόμη και σε ένα πίνακα από bytes. | |
| |
| Ανεξάρτητα από το πώς λειτουργούν εσωτερικά, όλα τα streams παρουσιάζουν το ίδιο απλό μοντέλο στα προγράμματα που τα χρησιμοποιούν: | |
| | |
| * Ένα stream είναι μια ακολουθία πληροφορίας (ροή από bytes). | |
| * Ένα πρόγραμμα χρησιμοποιεί ένα //input stream// για να διαβάσει δεδομένα από μια πηγή. | |
| * Ένα πρόγραμμα χρησιμοποιεί ένα //output stream// για να γράψει δεδομένα σε έναν προορισμό. | |
| |
| Στις περιπτώσεις που θέλουμε να διαβάσουμε συμβολοσειρές (π.χ. αρχεία κειμένου), δηλαδή ροές χαρακτήρων τότε η Java παρέχει τις εξειδικευμένες κλάσεις [[https://docs.oracle.com/javase/8/docs/api/java/io/Reader.html|java.io.Reader]] και [[https://docs.oracle.com/javase/8/docs/api/java/io/Writer.html|java.io.Writer]] οι οποίες εκτός από το να γράφουν και να διαβάζουν ροές πληροφορίας, κωδικοποιούν τις ροές χαρακτήρων σε ροές δυαδικής πληροφορίας (ροές bytes) και αντίστοφά κατά την εγγραφή ή την ανάγνωση σε/από την απομακρυσμένη πηγή. Μέσω αυτών των κλάσεων απλοποιείται η ανάγνωση και η εγγραφή ροών χαρακτήρων από εξωτερικές πηγές. | |
| |
| Οι κλάσεις στη στο πακέτο [[https://docs.oracle.com/javase/8/docs/api/java/io/package-frame.html|java.io]] για εγγραφή και ανάγνωση από απομακρυσμένες πηγές συνοψίζονται στις εξής: | |
| |
| | ^ Δυαδικά δεδομένα (ροές bytes) ^^ Δεδομένα κειμένου (ροές χαρακτήρων) ^^ | |
| | ::: ^ Input ^ Output ^ Input ^ Output ^ | |
| ^ Basic Class | [[https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html|InputStream]] | [[https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html|OutputStream]] | [[https://docs.oracle.com/javase/8/docs/api/java/io/Reader.html|Reader]] | [[https://docs.oracle.com/javase/8/docs/api/java/io/Writer.html|Writer]] | | |
| ^ Arrays | [[https://docs.oracle.com/javase/8/docs/api/java/io/ByteArrayInputStream.html|ByteArrayInputStream]] | [[https://docs.oracle.com/javase/8/docs/api/java/io/ByteArrayOutputStream.html|ByteArrayOutputStream]] | [[https://docs.oracle.com/javase/8/docs/api/java/io/CharArrayReader.html|CharArrayReader]] | [[https://docs.oracle.com/javase/8/docs/api/java/io/CharArrayWriter.html|CharArrayWriter]] | | |
| ^ Files | [[|FileInputStream]] | [[|FileOutputStream]] | [[|FileReader]] | [[|FileWriter]] | | |
| ^ Pipes | [[|PipedInputStream]] | [[|PipedOutputStream]] | [[|PipedReader]] | [[|PipedWriter]] | | |
| ^ Strings | | | [[|StringReader]] | [[|StringWriter]] | | |
| ^ Data (big-endian) | [[|DataInputStream]] | [[|DataOutputStream]] | | | | |
| ^ Formatted Data | | [[|PrintStream]] | | [[|PrintWriter]] | | |
| ^ Objects | [[|ObjectInputStream]] | [[|ObjectOutputStream]] | | | | |
| |
| ===== Είσοδος και έξοδος από την κονσόλα ===== | |
| |
| Προκειμένου να διαβάσετε και να γράψετε από την κονσόλα η Java διαθέτει την κλάση [[http://docs.oracle.com/javase/7/docs/api/java/lang/System.html|System]], η οποία διαθέτει 3 στατικές μεταβλητές τύπου **Stream**. Συγκεκριμένα, διατίθενται τα streams (τύπου [[http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html|PrintStream]]) [[http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#out|System.out]] (STDOUT) και [[http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#err|System.err]] (STDERR) για γράψιμο στην κονσόλα, καθώς και το stream (τύπου [[http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html|InputStream]])[[http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#in|System.in]] (STDIN) για διάβασμα από την κονσόλα. | |
| |
| Στις επόμενες ενότητες θα δούμε παραδείγματα εκτύπωσης και διαβάσματος από την κονσόλα. | |
| |
| |Προηγούμενο: [[java:class_file | Η κλάση File ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:java:byte_streams | Ροές Δεδομένων ]]| | |
| |