In this section we will be showing how to copy a folder in java. This means we need to have a recursive ways to copy a file. The java.io package contains FileInputStream and FileOutputStream classes providing methods to read a source file and then write the contents source target file. However this is only true for a single file. This source code shows how to do this recursively.

Copy to copy a folder in Java

This source code does not only shows how to copy multiple files but also checks target folder to be existing or not. Moreover it also creates a directory tree to satisfy the copy functionality requirements. The copy folder functionality is put in a method for ease of use if you decide to have this extend or imported as a library in your own java implementation. There were two methods exposed on this example, one is copyFile and copyDirectory. If you are just copying a single file, you can use the CopyFile method. However if you need a copy folder functionality please use the copyDirectory method.

package com.javatutorialhq.tutorial;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyFileRecursiveIO {

	/**
	 * This sample code shows how copy a folder in java
	 * illustrating recursive file copy
	 * Property of javatutorialhq.com
	 * All Rights Reserved
	 * Version 1.0
	 * 06/21/2012
	 */
	private static File fileInput = new File("C:\\temp\\sourcefolder");
	private static File fileOutput = new File("C:\\temp\\targetfolder");

	public static void main(String[] args) throws IOException {
		CopyFileRecursiveIO testObject = new CopyFileRecursiveIO();
		System.out.println("Executing Java recursive Folder Copy");
		System.out.println("Success:"
				+ testObject.CopyDirectory(fileInput, fileOutput));

	}

	// copy Directory method
	public boolean CopyDirectory(File source, File target) throws IOException {
		// check first if source file exists or not
		if (!source.exists()) {
			return false;
		}
		if (source.isDirectory()) {
			if (!target.exists()) {
				target.mkdir();
			}

			File[] listFile = source.listFiles();
			for (File f : listFile) {
				File sourceFile = new File(source, f.getName());
				File outputFile = new File(target, f.getName());
				if (f.isDirectory()) {
					new CopyFileRecursiveIO().CopyDirectory(sourceFile,
							outputFile);
				} else {
					new CopyFileRecursiveIO().copyFile(sourceFile, outputFile);
				}
			}

		}

		return true;
	}

	// Copy file method
	public void copyFile(File input, File output) throws IOException {
		FileInputStream inputStream = new FileInputStream(input);
		// target file declaration
		FileOutputStream outputStream = new FileOutputStream(output);
		int lengthStream;
		byte[] buff = new byte[1024];
		while ((lengthStream = inputStream.read(buff)) > 0) {
			// writing to the target file contents of the source file
			outputStream.write(buff, 0, lengthStream);
		}
		outputStream.close();
		inputStream.close();
	}
}

Sample Output:

Executing Java recursive Folder Copy
Success:true