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
java:write_to_file [2016/03/26 06:25]
gthanos
java:write_to_file [2017/04/28 10:56] (current)
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.*;
 +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 50:
       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 72:
       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.1458973512.txt.gz · Last modified: 2016/03/26 06:25 by gthanos