File类移动文件和文件夹
对于文件夹和文件的移动,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