Omar D
Omar D

Reputation: 15

Java copying only the missing files from dir to another

I'm working in a project were I have to copy only the missing files from one directory to another. How can i do that? looked every where in the net and I couldn't find the solution here is the code to copy the full directory but not only the missing files. Please help.

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

public class cFiles {
    public static void main(String[] args) {
        File srcFolder = new File("C://Source/");
        File destFolder = new File("C://Client/");
        // make sure source exists
        if (!srcFolder.exists()) {
            System.out.println("Directory does not exist.");
            // just exit
            System.exit(0);
        } else {
            try {
                copyFolder(srcFolder, destFolder);
            } catch (IOException e) {
                e.printStackTrace();
                // error, just exit
                System.exit(0);
            }
        }

        System.out.println("Done");
    }
    public static void copyFolder(File src, File dest) throws IOException {
        if (src.isDirectory()) {
            // if directory not exists, create it
            if (!dest.exists()) {
                dest.mkdirs();
                System.out.println("Directory copied from " + src + "  to "
                        + dest);
            }
            // list all the directory contents
            String files[] = src.list();
            for (String file : files) {
                // construct the src and dest file structure
                File srcFile = new File(src, file);
                File destFile = new File(dest, file);
                // recursive copy
                copyFolder(srcFile, destFile);
            }
            // Copying Files//
        } else {
            // if file, then copy it
            // Use bytes stream to support all file types
            InputStream in = new FileInputStream(src);
            OutputStream out = new FileOutputStream(dest);
            byte[] buffer = new byte[1024];
            int length;
            // copy the file content in bytes
            while ((length = in.read(buffer)) > 0) {
                out.write(buffer, 0, length);
            }

            in.close();
            out.close();
            System.out.println("File copied from " + src + " to " + dest);
        }
    }
}

Upvotes: 1

Views: 724

Answers (1)

Moritz Petersen
Moritz Petersen

Reputation: 13057

Your code is almost complete! You just have to add a check, if the destination file already exists.

Do it like this:

        // Copying Files//
    } else if (!dest.exists()) {
        // if file, then copy it
        // Use bytes stream to support all file types
        InputStream in = new FileInputStream(src);
        OutputStream out = new FileOutputStream(dest);

Upvotes: 1

Related Questions