Here is the code of the program :
import java.io.*;
import java.text.SimpleDateFormat;
public class DirectoryCopier
{
public static void main(String[] args) throws IOException
{
//Creating instance of DirectoryCopier
DirectoryCopier cd = new DirectoryCopier();
//Specifying Source Directory
String source = "D:\\Blog";
//Creating File of source directory
File src = new File(source);
//Specifying Destination Directory
String destination = "C:\\copyOfBlog";
File dst = new File(destination);
//Calling method DirectoryCopier with source and destination
cd.DirectoryCopier(src, dst);
}
public void DirectoryCopier(File srcPath, File dstPath) throws IOException
{
//If Source is a Directory
if (srcPath.isDirectory())
{
System.out.println(srcPath + "is directory.");
//If Destination directory not exists, create it
if (!dstPath.exists())
{
System.out.println("calling mkdir " + dstPath);
dstPath.mkdir();
}
//Get All Available Files in this source directory
String files[] = srcPath.list();
//Iterate each file
for(int i = 0; i < files.length; i++)
{
System.out.println("--Source "+srcPath);
System.out.println("--Destination "+dstPath);
//Recursively calling DirectoryCopier
DirectoryCopier(new File(srcPath, files[i]),new File(dstPath, files[i]));
}
}
//If Source is a leaf node
else
{
//If Source does not exists print it and exit
if(!srcPath.exists())
{
System.out.println("File or directory does not exist.");
System.exit(0);
}
else
{
System.out.println("Source "+srcPath);
System.out.println("Destination "+dstPath);
//Copying by bytes
FileInputStream in = new FileInputStream(srcPath);
FileOutputStream out = new FileOutputStream(dstPath);
// Transfer bytes from in to out
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0)
{
out.write(buf, 0, len);
}
in.close();
out.close();
}
}
System.out.println("Directory copied.");
}
}