java:file_io_intro

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
java:file_io_intro [2020/03/06 16:54]
gthanos [Είσοδος και Έξοδος του προγράμματος]
java:file_io_intro [2021/03/29 06:28]
Line 1: Line 1:
-====== Είσοδος και Έξοδος του προγράμματος ====== 
- 
-Για την ανάγνωση και εγγραφή από εξωτερικές πηγές η 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 κατά την εγγραφή στην πηγή ή μετασχηματίζουν τη ροή από 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/InputStreamReader.html|InputStreamReader]] | [[https://docs.oracle.com/javase/8/docs/api/java/io/Writer.html|Writer]], [[https://docs.oracle.com/javase/8/docs/api/java/io/InputStreamWriter.html|InputStreamWriter]] | 
-^ 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 | [[https://docs.oracle.com/javase/8/docs/api/java/io/FileInputStream.html|FileInputStream]] | [[https://docs.oracle.com/javase/8/docs/api/java/io/FileOutputStream.html|FileOutputStream]] | [[https://docs.oracle.com/javase/8/docs/api/java/io/FileReader.html|FileReader]] | [[https://docs.oracle.com/javase/8/docs/api/java/io/FileWriter.html|FileWriter]] | 
-^ Pipes | [[https://docs.oracle.com/javase/8/docs/api/java/io/PipedInputStream.html|PipedInputStream]] | [[https://docs.oracle.com/javase/8/docs/api/java/io/PipedOutputStream.html|PipedOutputStream]] | [[https://docs.oracle.com/javase/8/docs/api/java/io/PipedReader.html|PipedReader]] | [[https://docs.oracle.com/javase/8/docs/api/java/io/PipedWriter.html|PipedWriter]] | 
-^ Strings | | | [[https://docs.oracle.com/javase/8/docs/api/java/io/StringReader.html|StringReader]] | [[https://docs.oracle.com/javase/8/docs/api/java/io/StringWriter.html|StringWriter]] | 
-^ Data (big-endian) | [[https://docs.oracle.com/javase/8/docs/api/java/io/DataInputStream.html|DataInputStream]] | [[https://docs.oracle.com/javase/8/docs/api/java/io/DataOutputStream.html|DataOutputStream]] | | | 
-^ Formatted Data |  | [[https://docs.oracle.com/javase/8/docs/api/java/io/PrintStream.html|PrintStream]] |  | [[https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html|PrintWriter]] | 
-^ Objects | [[https://docs.oracle.com/javase/8/docs/api/java/io/ObjectInputStream.html|ObjectInputStream]] | [[https://docs.oracle.com/javase/8/docs/api/java/io/ObjectOutputStream.html|ObjectOutputStream]] | | | 
- 
-  * Οι κλάσεις [[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]] διαβάζουν και γράφουν δυαδική πληροφορία πάνω ένα πίνακα από bytes. Αντίστοιχα οι κλάσεις [[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]] διαβάζουν και γράφουν χαρακτήρες πάνω σε ένα πίνακα χαρακτήρων. 
-  * Οι κλάσεις [[https://docs.oracle.com/javase/8/docs/api/java/io/FileInputStream.html|FileInputStream]] και [[https://docs.oracle.com/javase/8/docs/api/java/io/FileOutputStream.html|FileOutputStream]] διαβάζουν και γράφουν δυαδική πληροφορία από/σε ένα δυαδικό αρχείο. Αντίστοιχα οι κλάσεις [[https://docs.oracle.com/javase/8/docs/api/java/io/FileReader.html|FileReader]] και [[https://docs.oracle.com/javase/8/docs/api/java/io/FileWriter.html|FileWriter]] διαβάζουν και γράφουν χαρακτήρες σε ένα αρχείο που περιέχει χαρακτήρες. Κατά την ανάγνωση ή εγγραφή με χρήση των κλάσεων [https://docs.oracle.com/javase/8/docs/api/java/io/FileReader.html|FileReader]] και [[https://docs.oracle.com/javase/8/docs/api/java/io/FileWriter.html|FileWriter]] ΔΕΝ μπορείτε να προσδιορίσετε την κωδικοποίηση των χαρακτήρων που περιέχονται στο αρχείο. Οι κλάσεις αυτές δουλεύουν με την //default// κωδικοποίηση των χαρακτήρων στη Java που είναι UTF-16. Εναλλακτικά, μπορείε να χρησιμοποιήσετε τις κλάσεις [[https://docs.oracle.com/javase/8/docs/api/java/io/InputStreamReader.html|InputStreamReader]] και [[https://docs.oracle.com/javase/8/docs/api/java/io/InputStreamWriter.html|InputStreamWriter]], οι οποίες δέχονται ως ορίσματα ένα [[https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html|InputStream]] (**FileInputStream** στη συγκεκριμένη περίπτωση) και μία επιπλέον παράμετρο που αφορά την κωδικοποίηση των χαρακτήρων που περιέχει το αρχείο. 
-  *  
-===== Είσοδος και έξοδος από την κονσόλα ===== 
- 
-Προκειμένου να διαβάσετε και να γράψετε από την κονσόλα η 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 | Ροές Δεδομένων ]]| 
  
java/file_io_intro.txt · Last modified: 2021/03/29 06:28 (external edit)