使用File类的delete()、renameTo()方法通过递归实现对文件夹的复制、移动和删除操作,File类未能提供复制文件的方法,使用流实现单个文件的复制。
public static void moveDir(File srcDir, File destDir) {
if (srcDir.isFile()) {
System.out.println("please input dir!");
return;
}
if (destDir.mkdir() || destDir.exists()) {
File[] subFiles = srcDir.listFiles();
if (subFiles != null && subFiles.length != 0) {
for (File subFile : subFiles) {
String subFilePath = subFile.getPath();
File destSubFile = new File(subFilePath.replace(srcDir.getPath(), destDir.getAbsolutePath()));
if (subFile.isFile()) {
if (subFile.renameTo(destSubFile)) {
System.out.println("move " + subFile + " to " + destSubFile + " suscess!");
} else {
System.out.println("move " + subFile + " to " + destSubFile + " failed!");
}
} else {
moveDir(subFile, destSubFile);
}
}
}
if (srcDir.delete()) {
System.out.println("delete dir success:" + srcDir);
} else {
System.out.println("delete dir failed:" + srcDir);
}
}
}
public static void deleteDir(File srcDir) {
if (srcDir.isFile()) {
return;
}
File[] subFiles = srcDir.listFiles();
for (File subFile : subFiles) {
if (subFile.isFile()) {
if (subFile.delete()) {
System.out.println("delete file success:" + subFile.getName());
} else {
System.out.println("delete file failed:" + subFile.getName());
}
} else {
deleteDir(subFile);
}
}
if (srcDir.delete()) {
System.out.println("delete dir success:" + srcDir.getName());
} else {
System.out.println("delete dir failed:" + srcDir.getName());
}
}
public static void copyDir(File srcDir, File destDir) {
if (srcDir.isFile()) {
return;
}
if (destDir.mkdir() || destDir.exists()) {
File[] subFiles = srcDir.listFiles();
if (subFiles == null || subFiles.length == 0) {
return;
}
for (File subFile : subFiles) {
String subFilePath = subFile.getPath();
File destSubFile = new File(subFilePath.replace(srcDir.getPath(), destDir.getAbsolutePath()));
if (subFile.isFile()) {
copySingleFile(subFile, destSubFile);
} else {
copyDir(subFile, destSubFile);
}
}
}
}
private static void copySingleFile(File srcFile, File destFile) {
if (!srcFile.isFile()) {
return;
}
FileInputStream fis = null;
FileOutputStream fos = null;
int byteRead = 0;
try {
fis = new FileInputStream(srcFile);
fos = new FileOutputStream(destFile);
byte[] buffer = new byte[1024];
while ((byteRead = fis.read(buffer)) != -1) {
fos.write(buffer, 0, byteRead);
}
System.out.println("copy " + srcFile + " to " + destFile + " success!");
} catch (FileNotFoundException e) {
System.out.println("can't find file");
e.printStackTrace();
} catch (IOException e) {
System.out.println("io exception!");
e.printStackTrace();
} finally {
try {
if (fis != null) {
fis.close();
}
if (fos != null) {
fos.close();
}
} catch (IOException e) {
System.out.println("close stream resource failed!");
e.printStackTrace();
}
}
}
public static void main(String[] args) {
File srcDir = new File("D:\\test");
File destDir = new File("D:\\var");
// copyDir(srcDir, destDir);
// moveDir(srcDir, destDir);
deleteDir(srcDir);
}
代码仅用于学习,类似Commons IO成熟的解决方案能轻松的进行文件及文件夹的操作。