java:write_to_file

Differences

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

Link to this comparison view

Next revision
Previous revision
java:write_to_file [2016/03/26 05:07]
gthanos created
java:write_to_file [2017/04/28 10:56]
gthanos [Παράδειγμα εγγραφής σε αρχείο κειμένου]
Line 1: Line 1:
 ====== Γράφοντας σε αρχείο ====== ====== Γράφοντας σε αρχείο ======
  
 +===== Γράφοντας σε αρχεία κειμένου =====
  
 +Προκειμένου να γράψετε κείμενο σε αρχείο ή στην κονσόλα μπορείτε να χρησιμοποιήσετε την κλάση [[https://​docs.oracle.com/​javase/​7/​docs/​api/​java/​io/​PrintWriter.html|java.io.PrintWriter]]. ​
 +
 +**Κατασκευαστές**
 +  * ''​PrintWriter(String fileName)''​ : Κατασκευάζει ένα αντικείμενο της κλάσης //​PrintWriter//​ από ένα αρχείο filename.
 +  * ''​PrintWriter(File file)''​ : Κατασκευάζει ένα αντικείμενο της κλάσης //​PrintWriter//​ από ένα αντικείμενο της κλάσης //File//.
 +
 +**Μέθοδοι**
 +  * ''​void print(String s)''​ : Εκτυπώνει το String s.
 +  * ''​void println(String s)''​ : Εκτυπώνει το String s ακολουθούμενο από χαρακτήρα αλλαγής γραμμής.
 +  * ''​PrintWriter printf(String format, Object... args)'':​ Η συγκεκριμένη μέθοδος είναι ανάλογη με την printf της γλώσσας C. Μπορείτε να διαμορφώσετε κατάλληλα μορφοποιημένη έξοδo. Για παράδειγμα,​ η παρακάτω έκφραση εκτυπώνει έναν αριθμό κινητής υποδιαστολής μέσα σε ένα String ως εξής:
 +<code java TestPrintf.java>​
 +import java.io.*;
 +
 +public class TestPrintf {
 +  public static void main(String args[]) {
 +    double f = 754.541012;
 +    System.out.printf("​The value of f is: %08.2f %n", f);
 +  }
 +}
 +//Το σύμβολο %n συμβολίζει τον χαρακτήρα αλλαγής γραμμής.
 +</​code>​
 +
 +  * ''​PrintWriter format(String format, Object... args)'':​ Ισοδύναμη με την printf.
 +
 +==== Παράδειγμα εγγραφής σε αρχείο κειμένου ====
 +
 +Δείτε την παρακάτω κλάση //​CopyTextFile//​ η οποία αντιγράφει το περιεχόμενο ενός αρχείου κειμένου σε ένα νέο με την προϋπόθεση ότι το νέο αρχείο δεν υφίσταται ήδη στο filesystem. ​
 +
 +<code java CopyTextFile.java>​
 +import java.io.*;
 +import java.util.*;​
 +
 +public class CopyTextFile {
 +  public static void main(String [] args) {
 +    Scanner sc = new Scanner(System.in);​
 +    System.out.print("​Enter src filename: ");
 +    String readFilename = sc.next();
 +    File readFile = new File(readFilename);​
 +    ​
 +    if( !readFile.isFile() ) {
 +      System.err.println("​Input file does not exist or is not a regular file!"​);​
 +      return;
 +    }
 +    if( !readFile.canRead() ) {
 +      System.err.println("​Input file is not readable!"​);​
 +      return;
 +    }
 +    ​
 +    System.out.print("​Enter dst filename: ");
 +    String writeFilename = sc.next();
 +    File writeFile = new File(writeFilename);​
 +    ​
 +    if( writeFile.exists() ) {
 +      System.err.println("​Output file exists! Unable to overwrite."​);​
 +      return;
 +    }
 +    ​
 +    try {
 +      String input;
 +      BufferedReader in = new BufferedReader(new FileReader(readFile));​
 +      PrintWriter out = new PrintWriter(writeFile);​
 +      while( (input = in.readLine()) != null ) {
 +        out.println(input);​
 +      }
 +      out.close();​
 +      in.close();
 +    } catch( IOException ex ) {
 +      ex.printStackTrace();​
 +    }
 +  }
 +}
 +</​code>​
 +
 +<WRAP todo 80% center round>
 +Με χρήση του παραπάνω προγράμματος προσπαθήστε να αντιγράψετε μία εικόνα. Τι παρατηρείτε;​ Γιατί;
 +</​WRAP>​
 +
 +===== Γράφοντας σε δυαδικά αρχεία =====
 +
 +Προκειμένου να γράψετε σε δυαδικά αρχεία (εικόνες,​ ήχο, βίντεο κλπ) η Java διαθέτει την κλάση [[https://​docs.oracle.com/​javase/​7/​docs/​api/​java/​io/​FileOutputStream.html|java.io.FileOutputStream]]. Θα δούμε τις μεθόδους και την χρήση της αναλυτικά παρακάτω
 +
 +**Κατασκευαστές**
 +  * ''​FileOutputStream(String filename)''​ : Δημιουργεί ένα αντικείμενο της κλάσης //​FileOutputStream//​ από το αρχείο με όνομα filename. Στη θέση του //String// filename θα πρέπει να βάλετε το path προς το αρχείο και όχι μόνο το όνομα του.
 +  * ''​FileOutputStream(File file)''​ : Δημιουργεί ένα αντικείμενο της κλάσης //​FileOutputStream//​ από ένα αντικείμενο της κλάσης //File//.
 +
 +**Μέθοδοι**
 +  * ''​public void write(byte[] b)''​ : Γράφει //b.length bytes// στο συγκεκριμένο outputStream.
 +  * ''​void write(byte[] b, int off, int len)''​ : Αντιγράφει στο outputStream //len bytes// από τον πίνακα //b// ξεκινώντας από την θέση off του πίνακα. Εάν θέσετε off=0 αντιγράφει από την αρχή του πίνακα.
 +
 +==== Παράδειγμα εγγραφής σε δυαδικό αρχείο ====
 +
 +Δείτε την παρακάτω κλάση //​CopyBinFile//​ (αποτελεί παραλλαγή της //​CopyTextFile//​),​ η οποία αντιγράφει το περιεχόμενο ενός αρχείου σε ένα νέο με την προϋπόθεση ότι το νέο αρχείο δεν υφίσταται ήδη στο filesystem.
 +
 +<code java CopyBinFile.java>​
 +import java.io.*;
 +import java.util.*;​
 +
 +public class CopyBinFile {
 +  public static void main(String [] args) {
 +    ​
 +    Scanner sc = new Scanner(System.in);​
 +    System.out.print("​Enter src filename: ");
 +    String readFilename = sc.next();
 +    File readFile = new File(readFilename);​
 +    ​
 +    if( !readFile.isFile() ) {
 +      System.err.println("​Input file does not exist or is not a regular file!"​);​
 +      return;
 +    }
 +    if( !readFile.canRead() ) {
 +      System.err.println("​Input file is not readable!"​);​
 +      return;
 +    }
 +    ​
 +    System.out.print("​Enter dst filename: ");
 +    String writeFilename = sc.next();
 +    File writeFile = new File(writeFilename);​
 +    ​
 +    if( writeFile.exists() ) {
 +      System.err.println("​Output file exists! Unable to overwrite."​);​
 +      return;
 +    }
 +    ​
 +    try {
 +      byte []buffer = new byte[2048];
 +      FileInputStream in = new FileInputStream(readFile);​
 +      FileOutputStream out = new FileOutputStream(writeFile);​
 +      int read_len;
 +      while( (read_len = in.read(buffer)) != -1 ) {
 +        out.write(buffer,​ 0, read_len);
 +      }
 +      out.close();​
 +      in.close();
 +    } catch( IOException ex ) {
 +      ex.printStackTrace();​
 +    }
 +  }
 +}
 +</​code>​
 +
 +|Προηγούμενο:​ [[ :​java:​read_from_file | Διαβάζοντας από ένα αρχείο ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο:​ [[ :​java:​object_serialization | Object Serialization ]] |
  
java/write_to_file.txt · Last modified: 2017/04/28 10:56 by gthanos