java:write_to_file

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
Last revision Both sides next revision
java:write_to_file [2016/03/26 06:25]
gthanos
java:write_to_file [2017/02/17 12:34]
gthanos [Παράδειγμα εγγραφής σε δυαδικό αρχείο]
Line 1: Line 1:
 ====== Γράφοντας σε αρχείο ====== ====== Γράφοντας σε αρχείο ======
 +
 +===== Γράφοντας σε αρχεία κειμένου =====
  
 Προκειμένου να γράψετε κείμενο σε αρχείο ή στην κονσόλα μπορείτε να χρησιμοποιήσετε την κλάση [[https://​docs.oracle.com/​javase/​7/​docs/​api/​java/​io/​PrintWriter.html|java.io.PrintWriter]]. ​ Προκειμένου να γράψετε κείμενο σε αρχείο ή στην κονσόλα μπορείτε να χρησιμοποιήσετε την κλάση [[https://​docs.oracle.com/​javase/​7/​docs/​api/​java/​io/​PrintWriter.html|java.io.PrintWriter]]. ​
Line 17: Line 19:
   public static void main(String args[]) {   public static void main(String args[]) {
     double f = 754.541012;     double f = 754.541012;
-    System.out.format("The value of f is: %08.2f %n", f);+    System.out.printf("The value of f is: %08.2f %n", f);
   }   }
 } }
Line 25: Line 27:
   * ''​PrintWriter format(String format, Object... args)'':​ Ισοδύναμη με την printf.   * ''​PrintWriter format(String format, Object... args)'':​ Ισοδύναμη με την printf.
  
-Δείτε την παρακάτω κλάση //​CopyTextFile//​ η οποία ​λαμβάνει ως είσοδο στη main τα ονόματα δύο αρχείων και ​αντιγράφει τα περιεχόμενα ​του πρώτου στο ​2ο αρχείο.+==== Παράδειγμα εγγραφής σε αρχείο κειμένου ==== 
 + 
 +Δείτε την παρακάτω κλάση //​CopyTextFile//​ η οποία αντιγράφει το περιεχόμενο ενός ​αρχείου κειμένου σε ένα νέο με την ​προϋπόθεση ότι ​το νέο αρχείο ​δεν υφίσταται ήδη στο filesystem
  
 <code java CopyTextFile.java>​ <code java CopyTextFile.java>​
 import java.io.*; import java.io.*;
 +
 +public class CopyTextFile {
 +import java.io.*;
 +import java.util.*;​
  
 public class CopyTextFile { public class CopyTextFile {
   public static void main(String [] args) {   public static void main(String [] args) {
-    ​if (args.length < 2{ +    ​Scanner sc = new Scanner(System.in); 
-      System.err.println("Insufficient number of arguments!")+    System.out.print("Enter src filename: ​"); 
-      return+    ​String readFilename ​sc.next(); 
-    ​+    File readFile ​= new File(readFilename);
-     +
-    File readFile ​new File(args[0]); +
-    File writeFile ​= new File(args[1]);+
     ​     ​
     if( !readFile.isFile() ) {     if( !readFile.isFile() ) {
Line 48: Line 53:
       return;       return;
     }     }
 +    ​
 +    System.out.print("​Enter dst filename: ");
 +    String writeFilename = sc.next();
 +    File writeFile = new File(writeFilename);​
 +    ​
     if( writeFile.exists() ) {     if( writeFile.exists() ) {
       System.err.println("​Output file exists! Unable to overwrite."​);​       System.err.println("​Output file exists! Unable to overwrite."​);​
Line 65: Line 75:
       ex.printStackTrace();​       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>​ </​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