Skip to content
Related Articles

Related Articles

Copying file using FileStreams in Java

View Discussion
Improve Article
Save Article
  • Difficulty Level : Basic
  • Last Updated : 18 Apr, 2022
View Discussion
Improve Article
Save Article

The main logic of copying a file is to read the file associated with FileInputStream variable and write the read contents into the file associated with FileOutputStream variable. We can copy a file from one location to another using FileInputStream and FileOutputStream classes in Java. Now before adhering forward let us discuss essential methods that will be used in the program. 

Method 1: read(): Reads a byte of data. Present in FileInputStream. 

Return type: An integer value 

Syntax: Other versions 

int read(byte[] bytearray

or

int read(byte[] bytearray, int offset, int length)

Method 2: write(int b): Writes a byte of data. Present in FileOutputStream

Syntax:

void write(byte[] bytearray)

or

void write(byte[] bytearray, int offset, int length)

Implementation: We will be creating two files named “demo.rtf” and “outputdemo.rtf” as another file where no content is there. Below is an image of the “demo.rtf” file as a sample input image.

  • First, we will create two objects of the File class, one referring to FileInputClass and the other for FileOutputStream Class.
  • Now we will create objects of FileInputStream class and FileOutputStream class prior to creating variables and assigning null to corresponding datatypes.
  • Pass respective objects of FileInputStream and FileOutputStream objects
  • Now using loops keep reading from a file and write it to another file using FileOuputStream using the read() and write() methods.

Tip: It is good practice to close the streams to avoid memory leakage.      

Example 1:

Java




// Java Program to Illustrate File InputStream and File
 
// Importing required classes
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
 
// Main class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating object of File class
        // Passing files from directory of local machine
        File file = new File(
            "/Users/mayanksolanki/Desktop/demo.rtf");
        File oFile = new File(
            "/Users/mayanksolanki/Desktop/outputdemo.rtf");
 
        // Now creating object of FileInputStream
        // Here they are variables
        FileInputStream fis = null;
        FileOutputStream fos = null;
 
        try {
            // Now we make them as objects of both classes
            // and passed reference of file in directory
            fis = new FileInputStream(file);
            fos = new FileOutputStream(oFile);
        }
 
        // Catch block to handle exceptions
        catch (FileNotFoundException e) {
 
            // Display message if exception occurs
            // File Not Found or Path is Incorrect
            System.out.println(e.printStackTrace());
        }
 
        try {
 
            // Now let us check how many bytes are available
            // inside content of file
            fis.available();
        }
 
        catch (Exception e) {
            e.printStackTrace();
        }
 
        // Using while loop to
        // write over outputdemo file
        int i = 0;
        while (i = fis.read() != -1) {
            fos.write(i);
        }
 
        // It will execute no matter what
        // to close connections which is
        // always good practice
        finally
        {
 
            // Closing the file connections
 
            // For input stream
            if (fis != null😉 {
                fis.clsoe();
            }
 
            // For output stream
            if (fos != null) {
                fos.close();
            }
        }
    }
}

Output: The same content will be reflected back in the “outputdemo.rtf” file as seen below in the “demo.rtf” file. 

Example 2:

Java




// Java Program Illustrating Copying a src File
// to Destination
 
// Importing required classes
import java.io.*;
 
// Main class
// src2dest
class GFG {
 
    // Main driver method
    public static void main(String args[])
        throws FileNotFoundException, IOException
    {
 
        // If file doesnot exist FileInputStream throws
        // FileNotFoundException and read() write() throws
        // IOException if I/O error occurs
        FileInputStream fis = new FileInputStream(args[0]);
 
        // Assuming that the file exists and
        // need not to be checked
        FileOutputStream fos
            = new FileOutputStream(args[1]);
 
        int b;
        while ((b = fis.read()) != -1)
            fos.write(b);
 
        // read() method will read only next int so we used
        // while loop here in order to read upto end of file
        // and keep writing the read int into dest file
        fis.close();
        fos.close();
    }
}

Output:

Output Explanation: The name of the src file and dest file must be provided using command line arguments where args[0] is the name of the source file and args[1] is the name of the destination file. 

This article is contributed by Parul Dang. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!