This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
java:character_streams [2017/02/07 12:41] gthanos [Διαβάζοντας και γράφοντας γραμμή-γραμμή σε αρχείο κειμένου] |
java:character_streams [2021/04/04 16:20] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Ροές Χαρακτήρων (Character Streams) ====== | ||
| - | Η Java χρησιμοποιεί για την κωδικοποίηση χαρακτήρων τη σύμβαση Unicode. Οποιοδήποτε αρχείο περιέχει χαρακτήρες, | ||
| - | |||
| - | ==== Χρησιμοποιώντας Streams Xαρακτήρων ==== | ||
| - | |||
| - | Όλες οι κλάσεις που περιγράφουν stream χαρακτήρων κατάγονται από τις κλάσεις [[https:// | ||
| - | |||
| - | <code java CopyCharacters.java> | ||
| - | import java.io.FileReader; | ||
| - | import java.io.FileWriter; | ||
| - | import java.io.IOException; | ||
| - | |||
| - | public class CopyCharacters { | ||
| - | public static void main(String[] args) throws IOException { | ||
| - | |||
| - | FileReader inputStream = null; | ||
| - | FileWriter outputStream = null; | ||
| - | |||
| - | try { | ||
| - | String filename; | ||
| - | if(args.length > 0) | ||
| - | filename = args[0]; | ||
| - | else | ||
| - | filename = " | ||
| - | | ||
| - | inputStream = new FileReader(filename); | ||
| - | outputStream = new FileWriter(" | ||
| - | |||
| - | int c; | ||
| - | while ((c = inputStream.read()) != -1) { | ||
| - | outputStream.write(c); | ||
| - | } | ||
| - | } finally { | ||
| - | if (inputStream != null) { | ||
| - | inputStream.close(); | ||
| - | } | ||
| - | if (outputStream != null) { | ||
| - | outputStream.close(); | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Η κλάση // | ||
| - | |||
| - | <WRAP tip 80% center round> | ||
| - | Τα streams χαρακτήρων είναι «περιτυλίγματα» των byte streams. Κάθε stream χαρακτήρων χρησιμοποιεί το byte stream για την εκτέλεση της φυσικής I/O, ενώ το stream χαρακτήρων χειρίζεται τη μετάφραση μεταξύ των χαρακτήρων και bytes. Η κλάση [[https:// | ||
| - | </ | ||
| - | |||
| - | ===== Διαβάζοντας και γράφοντας γραμμή-γραμμή σε αρχείο κειμένου ===== | ||
| - | |||
| - | Παραπάνω είδαμε την ανάγνωση και εγγραφή ενός χαρακτήρα σε κάθε κλήση των μεθόδων read και write. Προκειμένου να διαχειριζόμαστε περισσότερους χαρακτήρες σε κάθε κλήση των read και write, επιλέγουμε να διαβάζουμε και να γράφουμε ομάδες χαρακτήρων. | ||
| - | |||
| - | Μια συνηθισμένη ομαδοποίηση χαρακτήρων είναι γραμμή-γραμμή. Η γραμμή ορίζεται ως μία σειρά από χαρακτήρες με ένα χαρακτήρα αλλαγής γραμμής στο τέλος. Ο χαρακτήρας αλλαγής γραμμής μπορεί να είναι μια ακολουθία χαρακτήρων carriege return/line feed (' | ||
| - | |||
| - | Ας τροποποιήσουμε το παράδειγμα // | ||
| - | |||
| - | Το παράδειγμα [[CopyLines]] επικαλείται τις [[http:// | ||
| - | |||
| - | <code java CopyLines.java> | ||
| - | import java.io.*; | ||
| - | |||
| - | public class CopyLines { | ||
| - | public static void main(String[] args) throws IOException { | ||
| - | |||
| - | BufferedReader inputStream = null; | ||
| - | PrintWriter outputStream = null; | ||
| - | |||
| - | try { | ||
| - | String filename; | ||
| - | if(args.length > 0) | ||
| - | filename = args[0]; | ||
| - | else | ||
| - | filename = " | ||
| - | | ||
| - | inputStream = new BufferedReader(new FileReader(filename)); | ||
| - | outputStream = new PrintWriter(new FileWriter(" | ||
| - | |||
| - | String l; | ||
| - | while ((l = inputStream.readLine()) != null) { | ||
| - | outputStream.println(l); | ||
| - | } | ||
| - | } finally { | ||
| - | if (inputStream != null) { | ||
| - | inputStream.close(); | ||
| - | } | ||
| - | if (outputStream != null) { | ||
| - | outputStream.close(); | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | <WRAP tip 80% center round> | ||
| - | Η κλήση της // | ||
| - | </ | ||
| - | |||
| - | |Προηγούμενο: | ||