Java tutorial
//package com.java2s; 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 Main { public static void rename(File oldFile, File newFile) { if (newFile.exists() && !newFile.delete()) { throw new RuntimeException("can not del dest file: " + newFile); } if (!oldFile.renameTo(newFile)) { try { copy(oldFile, newFile); if (!oldFile.delete()) { // this is not so bad, but still very strange System.err.println("can not del source file: " + oldFile); } } catch (Exception ex) { throw new RuntimeException("rename failed: from: " + oldFile + " to: " + newFile, ex); } } } public static void copy(File src, File dest) throws IOException { if (src.isDirectory()) { //if directory not exists, create it if (!dest.exists()) { dest.mkdir(); System.out.println("Directory copied from " + src + " to " + dest); } //list all the directory contents String files[] = src.list(); for (int c = 0; c < files.length; c++) { //construct the src and dest file structure File srcFile = new File(src, files[c]); File destFile = new File(dest, files[c]); //recursive copy copy(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); } } }