This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
java:write_to_file [2016/03/26 05:55] 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 11: | Line 13: | ||
| * ''void println(String s)'' : Εκτυπώνει το String s ακολουθούμενο από χαρακτήρα αλλαγής γραμμής. | * ''void println(String s)'' : Εκτυπώνει το String s ακολουθούμενο από χαρακτήρα αλλαγής γραμμής. | ||
| * ''PrintWriter printf(String format, Object... args)'': Η συγκεκριμένη μέθοδος είναι ανάλογη με την printf της γλώσσας C. Μπορείτε να διαμορφώσετε κατάλληλα μορφοποιημένη έξοδo. Για παράδειγμα, η παρακάτω έκφραση εκτυπώνει έναν αριθμό κινητής υποδιαστολής μέσα σε ένα String ως εξής: | * ''PrintWriter printf(String format, Object... args)'': Η συγκεκριμένη μέθοδος είναι ανάλογη με την printf της γλώσσας C. Μπορείτε να διαμορφώσετε κατάλληλα μορφοποιημένη έξοδo. Για παράδειγμα, η παρακάτω έκφραση εκτυπώνει έναν αριθμό κινητής υποδιαστολής μέσα σε ένα String ως εξής: | ||
| - | <code java TestPrintf> | + | <code java TestPrintf.java> |
| import java.io.*; | import java.io.*; | ||
| 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// η οποία αντιγράφει το περιεχόμενο ενός αρχείου κειμένου σε ένα νέο με την προϋπόθεση ότι το νέο αρχείο δεν υφίσταται ήδη στο 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 ]] | | ||