Thursday, May 24, 2012

How to copy file in Java Program example tutorial

How to copy file in Java from one directory to another is common requirement, given that there is no direct method in File API for copying files from one location to another. Painful way of copying file is reading from FileInputStream and writing same data to FileOutputStream to another directory. Though this process works its pretty raw to work with and best approach is for anyone to create library for common File operation like cut, copy, paste etc. Thankfully you don't need to reinvent wheel here, there are some open source library available which allows us to copy file in Java easily from one directory to another. One of such library is Apache commons IO which contains a class called FileUtils, which provides utility method for file related operation. FileUtils.copyFile(sourceFile, targetFile) can be used to copy files in Java.  This Java program copy file from one location to other using FileUtils class.

This Java programming tutorial is next in series of earlier article in File API like how to create hidden file in Java  and how to read from text file. If you are new to Java File API you may find them useful.

Java Program to copy file in Java - Example Code:

copy file from one directory to other in java programBelow is the complete code example of copying one file in Java. We need to provide absolute path of source file to copy and destination directory. you can get the name of file by calling File.getName() and FileUtils will create the same file in destination directory with same name.

import java.util.Date;

 * Simple Java program to copy files from one directory to another directory.
 * Java IO API doesn't provide any direct way to copy files but you can copy files
 * by copying its contents from InputStream to OutputStream. Though there are some
 * better ways to do it like Using Apache Commons Utils library has FileUtils class
 * to copy files in Java
 * @author Javin

public class FileCopyExample {

    public static void main(String args[]) throws IOException {
        //absolute path for source file to be copied
        String source = "C:/sample.txt";
        //directory where file will be copied
        String target ="C:/Test/";
        //name of source file
        File sourceFile = new File(source);
        String name = sourceFile.getName();
        File targetFile = new File(target+name);
        System.out.println("Copying file : " + sourceFile.getName() +" from Java Program");
        //copy file from one location to other
        FileUtils.copyFile(sourceFile, targetFile);
        System.out.println("copying of file from Java program is completed");
Copying file : sample.txt from Java Program
copying of file from Java program is completed

That's all on how to copy file in Java. This simple Java program can be extended to copy all files from one directory to another directory by just providing name of source and directory and then Java program will pick up each file and create another file with same name in target directory. If you are going to do in plain Java its requires lot of code and chances of error is high but if you use Apache Commons io library and FileUtils class it just matter of few line. As Joshua Bloach has rightly said in Effective Java, “prefer library over custom code”. Let me know if you find any bug on this Java File copy program .

Further Learning
Java Fundamentals Part 1,2
Java Fundamentals: The Java Language
Head First Java


Jirka Pinkas said...

Nice! Apache Commons rulez :) And it has even much more useful methods.

Anonymous said...

On Java 7, you don't need any 3rd party library, you can use java.nio.file.Files#copy(Path, Path, CopyOption...) instead.

Anonymous said...

This didnt work for me, cant see any copied file in the dest folder. The code runs fine though. Wierd??? any suggestion?

Anonymous said...

Outdated: Java8 supports file copy:

Anonymous said...

You can also use FileChannel to copy file from one location to another in Java. Its very efficient, espcially for copying large files.

As anonymous said, no need to use Apache Commons IO if you are running in Java 7, use the standard Files.copy() method for copying file from one folder to another. Its simple, easy and efficient.

Post a Comment