User Tools

Site Tools


java:formatting

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
java:formatting [2017/02/07 08:05] gthanosjava:formatting [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
Line 1: Line 1:
-====== Μορφοποίηση Εξόδου ======+====== Εγγραφή σε αρχεία κείμενου ======
  
-**Σημείωση:** Τα μόνα //PrintStream// αντικείμενα που είναι πιθανό να χρειαστείτε είναι τα //System.out// και //System.err//. Όταν χρειάζεται να δημιουργήσετε ένα διαμορφωμένο stream εξόδου, χρησιμοποιήστε //PrintWriter//, και όχι //PrintStream//+Η εγγραφή αρχείων κειμένου γίνεται μέσω της κλάσης [[https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html|PrintWriter]]. Προκειμένου να γράψετε σε ένα αρχείο θα πρέπει να δημιουργήσετε ένα αντικείμενο αυτής της κλάσης με όρισμα το όνομα του αρχείου στο οποίο θέλετε να γράψετε. Εάν το αρχείο υπάρχει τα περιεχόμενα του θα διαγραφούν.
  
-Οι κλάσεις [[http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html|PrintStream]] και [[http://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html|PrintWriter]] υλοποιούν ένα κοινό σύνολο μεθόδων για εγγραφή χαρακτήρων. Δύο βασικές δυνατότητες μορφοποίησης παρέχονται:+Στο παρακάτω παράδειγμα, η κλάση ReadWithScanner της προηγούμενης ενότητας επεκτείνεται με μία επιπλέον μέθοδο για την εγγραφή των περιεχομένων του πίνακα των τηλεφωνικών αριθμών σε ένα αρχείο τύπου [[wiki:Comma-separated_values|CSV]] (Comma Separated Values). Παρατηρήστε ότι για να ανοίξουμε ένα αρχείο για εγγραφή μέσω της κλάσης PrintWriter θα πρέπει αυτό να γίνει μέσα σε ένα try block (ή try-with-resources block) και θα πρέπει να διαχειριστούμε το [[https://docs.oracle.com/javase/8/docs/api/java/io/FileNotFoundException.html|java.io.FileNotFoundException]]. 
 + 
 +<code java ReadWithScannerAndWriteCSV.java> 
 +import java.util.*; 
 +import java.io.*; 
 + 
 +public class ReadWithScannerAndWriteCSV { 
 + 
 + 
 +  public static void main(String []args) { 
 +   
 +    TelephoneNumber[] numbers; 
 +    numbers = readTelephoneNumbers("telephone-list.txt"); 
 +    printTelephoneNumbers(numbers); 
 +    writeTelephoneNumbers2CSVfile(numbers, "contacts.csv"); 
 +  } 
 +   
 +  public static void printTelephoneNumbers(TelephoneNumber[] numbers) { 
 +    for(TelephoneNumber number : numbers) { 
 +      System.out.println(number); 
 +    } 
 +  } 
 +   
 +  public static TelephoneNumber[] readTelephoneNumbers(String filename) { 
 +    String firstname, lastname; 
 +     
 +    long number; 
 +    int i=0; 
 +    TelephoneNumber numbers[] = new TelephoneNumber[5]; 
 +    try(Scanner sc = new Scanner(new File(filename))) { 
 +       
 +      while( sc.hasNext() ) {         
 +        firstname = sc.next(); 
 +        lastname = sc.next(); 
 +        number = sc.nextLong(); 
 + 
 +        numbers[i++] = new TelephoneNumber(firstname+" "+lastname, number); 
 +      } 
 +       
 +    } catch(InputMismatchException ex) { 
 +      System.out.println("Invalid file contents!"); 
 +    } catch(FileNotFoundException ex) { 
 +      System.out.println("Unable to open '"+filename+"'"); 
 +    } 
 +     
 +    return numbers; 
 +  } 
 +   
 +  public static void writeTelephoneNumbers2CSVfile(TelephoneNumber[] numbers, String filename) { 
 +     
 +    try(PrintWriter writer = new PrintWriter(filename)) { 
 +      for(TelephoneNumber number : numbers) { 
 +        writer.format("%d, %s\n", number.getNumber(), number.getName()); 
 +      } 
 +    } 
 +    catch(FileNotFoundException ex) { 
 +      System.out.format("Unable to open file '%s' for writting!\n", filename); 
 +    } 
 +     
 +  } 
 +
 +</code> 
 + 
 +Η κλάση [[https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html|PrintWriter]], όπως και η κλάση [[https://docs.oracle.com/javase/8/docs/api/java/io/PrintStream.html|PrintStream]] παρέχουν τη μέθοδο format (ή printf) για την εκτύπωση μορφοποιημένης εξόδου. Η έννοια της μορφοποιημένες εξόδου εξηγείται παρακάτω και εφαρμόζεται τόσο σε αρχεία όσο και σε εκτύπωση στην κονσόλα. 
 + 
 +===== Μορφοποίηση Εξόδου ===== 
 + 
 +Οι κλάσεις [[http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html|PrintStream]] και [[http://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html|PrintWriter]] υλοποιούν ένα κοινό σύνολο μεθόδων για εγγραφή χαρακτήρων. Παρέχονται οι παρακάτω δύο δυνατότητες μορφοποίησης:
  
   - Οι μέθοδοι //print// και //println// οι οποίες δέχονται μόνο ένα όρισμα είτε βασικού τύπου (int, long, double, byte etc), είτε αναφορικού τύπου ([[http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html|Object]] ή [[http://docs.oracle.com/javase/7/docs/api/java/lang/String.html|String]])   - Οι μέθοδοι //print// και //println// οι οποίες δέχονται μόνο ένα όρισμα είτε βασικού τύπου (int, long, double, byte etc), είτε αναφορικού τύπου ([[http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html|Object]] ή [[http://docs.oracle.com/javase/7/docs/api/java/lang/String.html|String]])
Line 11: Line 78:
  
 Η κλήση των //print// ή //println// απαιτεί την εκτύπωση ενός αλφαριθμητικού. Εάν το όρισμα που λαμβάνουν οι μέθοδοι αυτές δεν είναι αλφαριθμητικό τότε  Η κλήση των //print// ή //println// απαιτεί την εκτύπωση ενός αλφαριθμητικού. Εάν το όρισμα που λαμβάνουν οι μέθοδοι αυτές δεν είναι αλφαριθμητικό τότε 
-  * για αναφορικούς τύπους που δεν είναι Striung καλείται η μέθοδος ''toString()'', προκειμένου να μετατραπούν τα ορίσματα σε String.  +  * για αναφορικούς τύπους που δεν είναι String καλείται η μέθοδος ''toString()'', προκειμένου να μετατραπούν τα ορίσματα σε String.  
-  * για βασικούς τύπους, αυτοί μετατρέπονται πρώτα σε αναφορικούς (int --> Integer, long --> Long) και στη συνέχεια καλείται η μέθοδος ''toString'' για αυτούς.+  * για βασικούς τύπους, αυτοί μετατρέπονται πρώτα σε αναφορικούς (int --> [[http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html|Integer]], long --> [[http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html|Long]]) και στη συνέχεια καλείται η μέθοδος ''toString'' για αυτούς. 
 + 
 +<WRAP tip 80% center round> 
 +Η διαφορά μεταξύ των μεθόδων //print// και //println// είναι ότι η δεύτερη εκτυπώνει στο τέλος και ένα χαρακτήρα αλλαγής γραμμής. 
 +</WRAP>
  
 Μπορείτε να δείτε το παρακάτω παράδειγμα: Μπορείτε να δείτε το παρακάτω παράδειγμα:
Line 42: Line 113:
 </code> </code>
  
-==== Η Μέθοδος format ====+==== Η μέθοδος format ή printf ====
  
-Η μέθοδος //format// μορφοποιεί πολλαπλά στοιχεία που βασίζονται σε ενα //String// μορφοποίησης. Το String μορφoποίησης είναι ένα String που περιέχει προσδιοριστές μορφοποίησης. Το παράδειγμα //Root2// μορφοποιεί δύο τιμές με μία μόνο κλήση της //format//:+Η μέθοδος //format// μορφοποιεί ένα string σε αναλογία με τη συνάρτηση [[http://www.cplusplus.com/reference/cstdio/printf/|printf]] στη γλώσσα C. Το ακόλουθο παράδειγμα //SquareRoot// μορφοποιεί δύο τιμές με μία μόνο κλήση της //format//:
  
-<code java Root2.java> +<code java SquareRoot.java> 
-public class Root2 {+public class SquareRoot {
     public static void main(String[] args) {     public static void main(String[] args) {
         int i = 2;         int i = 2;
Line 57: Line 128:
 </code> </code>
  
-H έξοδος της κλάσης Root2 δίνεται παρακάτω +H έξοδος της κλάσης SquareRoot είναι: ''The square root of 2 is 1.414214.''
-<code java> +
-The square root of 2 is 1.414214. +
-</code>+
  
-Όλα οι προσδιοριστές μορφοποίησης αρχίζουν με τον χαρακτήρα '%' και ακολουθούν 1 ή 2 χαρακτήρες που καθορίζει το είδος της μορφοποιημένης εξόδου που παράγεται. Παρακάτω δίνονται μερικές από τις πιο συνήθεις μετατροπές:+Όλοι οι προσδιοριστές μορφοποίησης αρχίζουν με τον χαρακτήρα '%' και ακολουθούν 1 ή 2 χαρακτήρες που καθορίζουν το είδος της μορφοποιημένης εξόδου που παράγεται. Παρακάτω δίνονται μερικές από τις πιο συνήθεις μετατροπές:
  
   * το %d μορφοποιεί μια τιμή integer ως μια δεκαδική τιμή.   * το %d μορφοποιεί μια τιμή integer ως μια δεκαδική τιμή.
Line 73: Line 141:
 {{:java:format.png}} {{:java:format.png}}
  
-Παρακάτω δίνεται δύο παραδείγματα χρήσης των σημαντικότερων προσδιοριστών μορφοποίησης που παρουσιάστηκαν παραπάνω.+Ακολουθούν δύο παραδείγματα χρήσης των σημαντικότερων προσδιοριστών μορφοποίησης που παρουσιάστηκαν προηγούμενα.
  
 <code java MyFormat.java> <code java MyFormat.java>
 public class MyFormat { public class MyFormat {
     public static void main(String[] args) {     public static void main(String[] args) {
-        System.out.format("%f, %1$+020.10f %n", Math.PI);+        System.out.format("%f, 020.10f %n", Math.PI);
     }     }
 } }
Line 117: Line 185:
  
  
-|Προηγούμενο: [[:java:character_streams Streams Χαρακτήρων]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:java:class_path Η κλάση Path ]] |+|Προηγούμενο: [[:java:util_scanner_class Η κλάση Scanner]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:java:object_serialization Object Serialization/Deserialization ]] |
  
  
java/formatting.1486454718.txt.gz · Last modified: 2017/02/07 08:05 by gthanos