Copying file using FileStreams in Java - GeeksforGeeks

18 Apr, 2022
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 classesimport java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream; // Main classclass 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 classesimport java.io.*; // Main class// src2destclass 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.
solankimayank
java-file-handling
Java-I/O
Java
School Programming
Java
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Split() String method in Java with examples
Arrays.sort() in Java with examples
Reverse a string in Java
Initialize an ArrayList in Java
Object Oriented Programming (OOPs) Concept in Java
Python Dictionary
Arrays in C/C++
Inheritance in C++
Reverse a string in Java
C++ Classes and Objects