Java provides I/O Streams to read and write data where, a Stream represents an input source or an output destination which could be a file, i/o devise, other program etc.
Based on the data they handle there are two types of streams −
The Reader and Writer classes (abstract) are the super classes of all the character stream classes: classes that are used to read/write character streams.
Whereas the InputStream and OutputStream classes (abstract) are the super classes of all the input/output stream classes: classes that are used to read/write a stream of bytes.
Following diagram illustrates all the input and output Streams (classes) in Java.
The major difference between these is that the input/output stream classes read/write byte stream data. Whereas the Reader/Writer classes handle characters.
The methods of input/output stream classes accept byte array as parameter whereas the Reader/Writer classes accept character array as parameter.
The Reader/Writer classes handles all the Unicode characters, comes handy for internalization, comparatively efficient that input/output streams.
Therefore, until you deal with binary data like images it is recommended to use Reader/Writer classes.
Following Java program reads data from a particular file using FileInputStream and writes it to another, using FileOutputStream.
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class IOStreamsExample { public static void main(String args[]) throws IOException { //Creating FileInputStream object File file = new File("D:/myFile.txt"); FileInputStream fis = new FileInputStream(file); byte bytes[] = new byte[(int) file.length()]; //Reading data from the file fis.read(bytes); //Writing data to another file File out = new File("D:/CopyOfmyFile.txt"); FileOutputStream outputStream = new FileOutputStream(out); //Writing data to the file outputStream.write(bytes); outputStream.flush(); System.out.println("Data successfully written in the specified file"); } }
Data successfully written in the specified file
Following Java program reads data from a particular file using FileReader and writes it to another, using FileWriter.
import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class IOStreamsExample { public static void main(String args[]) throws IOException { //Creating FileReader object File file = new File("D:/myFile.txt"); FileReader reader = new FileReader(file); char chars[] = new char[(int) file.length()]; //Reading data from the file reader.read(chars); //Writing data to another file File out = new File("D:/CopyOfmyFile.txt"); FileWriter writer = new FileWriter(out); //Writing data to the file writer.write(chars); writer.flush(); System.out.println("Data successfully written in the specified file"); } }
Data successfully written in the specified file