====== Γράφοντας σε αρχείο ======
===== Γράφοντας σε αρχεία κειμένου =====
Προκειμένου να γράψετε κείμενο σε αρχείο ή στην κονσόλα μπορείτε να χρησιμοποιήσετε την κλάση [[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 ως εξής:
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.
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 διαθέτει την κλάση [[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.
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:read_from_file | Διαβάζοντας από ένα αρχείο ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο: [[ :java:object_serialization | Object Serialization ]] |