I am currently coping folders from one place to another. It is working fine out but it is not copying the original folder that all the rest of the files and folders are in over as well. This is the code I am using:
public static void copyFolder(File src, File dest) throws IOException {
if (src.isDirectory()) {
//if directory not exists, create it
if (!dest.exists()) {
dest.mkdir();
}
//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+"\\"+src.getName(), file);
//recursive copy
copyFolder(srcFile,destFile);
}
} 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);
}
}
So I have the folder src C:\test\mytest\..all folders..
I want to copy it to C:\test\myfiles
But instead of getting C:\test\myfiles\mytest\..all folders..
im getting C:\test\myfiles\..all folders..
Try using the copyDirectory(File srcDir, File destDir) method from the Apache Commons IO library instead.
There is a tutorial for copying files using java.nio with a recursive copy example code on Oracle Docs. It works with java se 7+. It uses Files.walkFileTree method, which might cause some issues on ntfs with junction points. To avoid using Files.walkFileTree, the possible solution can look like:
public static void copyFileOrFolder(File source, File dest, CopyOption... options) throws IOException {
if (source.isDirectory())
copyFolder(source, dest, options);
else {
ensureParentFolder(dest);
copyFile(source, dest, options);
}
}
private static void copyFolder(File source, File dest, CopyOption... options) throws IOException {
if (!dest.exists())
dest.mkdirs();
File[] contents = source.listFiles();
if (contents != null) {
for (File f : contents) {
File newFile = new File(dest.getAbsolutePath() + File.separator + f.getName());
if (f.isDirectory())
copyFolder(f, newFile, options);
else
copyFile(f, newFile, options);
}
}
}
private static void copyFile(File source, File dest, CopyOption... options) throws IOException {
Files.copy(source.toPath(), dest.toPath(), options);
}
private static void ensureParentFolder(File file) {
File parent = file.getParentFile();
if (parent != null && !parent.exists())
parent.mkdirs();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With