What is Java Input/Output?
Java Input/Output (I/O) is used to process input and generate output in the form of files. Java uses the concept of streams, which allows for fast I/O operations. 
With the java.io package, all input and output operations can be easily performed.
Handling Files in Java Using Input/Output
Streams
Streams can be defined as a sequence of data composed of bytes. It's called a stream because it is like a stream of water that continues to flow. There are two kinds of Streams:
Input Stream: Used to read data from a source. This could be a file, array, peripheral device, or socket.
Output Stream: Used to write data to a destination. This could be a file, array, peripheral device, or socket.
The flow for an input stream is illustrated below:
Byte to Stream
Java byte stream are used to perform input and output of  8-bit bytes. Following is an example which makes use of these two classes to copy an input file into an output file −
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class LearnStream {
    public static void main(String[] args) throws IOException {
       var directory = "D://sample/stream/";
       var fileInput = new FileInputStream(directory+"input.txt");
       var fileOutput = new FileOutputStream(directory+"output.txt");
       try{
           int i;
           while((i= fileInput.read())!=-1){
               fileOutput.write(i);
           }
       } catch (IOException e) {
           throw new RuntimeException(e);
       }
    }
}
Now let's have a file input.txt with the following content
Dimas Priyandi
Software Developer
Java
Angular 
Spring Boot
Running program and we get a file with name output.txt with the following content
Dimas Priyandi
Software Developer
Java
Angular 
Spring Boot
Example
To better understand file input streams and file output streams, let's create a new sample where we have an input file named count.txt.
The contents of count.txt are as follows:
100
90
80
70
60
50
40
30
20
10
0
When the File Input Stream reads the numerical data from the file count.txt, we will store it in an array and then perform a summation operation to calculate the total sum of the data. Please follow the program code below:
import java.io.*;
public class LeanCount {
    public static void main(String[] args) throws FileNotFoundException {
        var directory = "D://sample/stream/";
        var fileInput = new FileInputStream(directory+"count.txt");
        var fileOutput = new FileOutputStream(directory+"sum.txt");
        Integer sum = 0;
        try{
            var reader = new BufferedReader(new InputStreamReader(fileInput));
            var outputWriter = new BufferedWriter(new OutputStreamWriter(fileOutput));
            String line;
            while((line=reader.readLine()) !=null){
                sum+=Integer.parseInt(line);
            }
            reader.close();
            outputWriter.write(sum.toString());
            outputWriter.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    }
Output:
- we can see output of sum.txt is :
550
Explanation:
- FileInputStream: Used to read bytes from the file count.txt.
- InputStreamReader: Converts the bytes read by FileInputStream into characters.
- BufferedReader: Provides the readLine() method to read the file line by line.
- Numbers Array: An integer array to store the numbers read from the file.
- Sum Calculation: A loop to sum up all the numbers stored in the array.
- FileOutputStream: Used to write bytes to the file.
- OutputStreamWriter: Converts the character stream to a byte stream.
- BufferedWriter: Provides buffering for writing characters, arrays, and lines efficiently.
Summary
Java's I/O streams provide a powerful way to handle file operations. By using InputStream and OutputStream, and their buffered counterparts, you can efficiently read from and write to files.
 
 
              

 
    
Top comments (0)