java:write_to_file

This is an old revision of the document!


Γράφοντας σε αρχείο

Γράφοντας σε αρχεία κειμένου

Προκειμένου να γράψετε κείμενο σε αρχείο ή στην κονσόλα μπορείτε να χρησιμοποιήσετε την κλάση 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 ως εξής:
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 συμβολίζει τον χαρακτήρα αλλαγής γραμμής.
  • PrintWriter format(String format, Object… args): Ισοδύναμη με την printf.

Παράδειγμα εγγραφής σε αρχείο κειμένου

Δείτε την παρακάτω κλάση CopyTextFile η οποία αντιγράφει το περιεχόμενο ενός αρχείου κειμένου σε ένα νέο με την προϋπόθεση ότι το νέο αρχείο δεν υφίσταται ήδη στο filesystem.

CopyTextFile.java
import java.io.*;
 
public class CopyTextFile {
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();
    }
  }
}

Με χρήση του παραπάνω προγράμματος προσπαθήστε να αντιγράψετε μία εικόνα. Τι παρατηρείτε; Γιατί;

Γράφοντας σε δυαδικά αρχεία

Προκειμένου να γράψετε σε δυαδικά αρχεία (εικόνες, ήχο, βίντεο κλπ) η Java διαθέτει την κλάση 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.

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();
    }
  }
}
java/write_to_file.1487334885.txt.gz · Last modified: 2017/02/17 12:34 by gthanos