对于文件夹和文件的移动,File类未提供直接的move函数。只提供了renameTo函数进行重命名,delete函数删除文件及空文件夹。利用这两个函数我们可以进行文件和文件夹的移动。
moveFile移动源文件到目的文件夹。注意使用renameTo而不是读取文件所有内容,在目的地址新建文件的效率高很多。因为renameTo相当于修改了快捷方式,并没有增加磁盘io。只是修改磁盘一个区域索引地址而已。
moveDirectory移动源文件夹中所有内容(包括子文件夹)到目的文件夹
可以在函数中加更丰富的提示以及判断。文件不存在该怎么做,是否自动创建文件夹,是否删除源文件夹,文件或文件夹移动失败如何等等。
moveFile源码:
/**
* 移动文件
* @param srcFileName 源文件完整路径
* @param destDirName 目的目录完整路径
* @return 文件移动成功返回true,否则返回false
*/
public boolean moveFile(String srcFileName, String destDirName) {
File srcFile = new File(srcFileName);
if(!srcFile.exists() || !srcFile.isFile())
return false;
File destDir = new File(destDirName);
if (!destDir.exists())
destDir.mkdirs();
return srcFile.renameTo(new File(destDirName + File.separator + srcFile.getName()));
}
moveDirectory源码:
/**
* 移动目录
* @param srcDirName 源目录完整路径
* @param destDirName 目的目录完整路径
* @return 目录移动成功返回true,否则返回false
*/
public boolean moveDirectory(String srcDirName, String destDirName) {
File srcDir = new File(srcDirName);
if(!srcDir.exists() || !srcDir.isDirectory())
return false;
File destDir = new File(destDirName);
if(!destDir.exists())
destDir.mkdirs();
/**
* 如果是文件则移动,否则递归移动文件夹。删除最终的空源文件夹
* 注意移动文件夹时保持文件夹的树状结构
*/
File[] sourceFiles = srcDir.listFiles();
for (File sourceFile : sourceFiles) {
if (sourceFile.isFile())
moveFile(sourceFile.getAbsolutePath(), destDir.getAbsolutePath());
else if (sourceFile.isDirectory())
moveDirectory(sourceFile.getAbsolutePath(),
destDir.getAbsolutePath() + File.separator + sourceFile.getName());
else
;
}
return srcDir.delete();
}
参考:http://download.oracle.com/javase/1.4.2/docs/api/java/io/File.html