剪切(使用File类的renameTo 方法和递归实现非空目录的剪切)

剪切(使用File类的renameTo 方法和递归实现非空目录的剪切)

package com.cn.recursion;
import java.io.File;
import java.io.IOException;
public class CutDireaction {
	public static void main(String[] args) throws IOException {
		
		/**
		 * 以下是File类方法的测试
		 */
		
		//renameTo()如果目标文件与源文件是在同一个路径下,那么renameTo()的作用是重命名
/*		File file = new File("f:/b.txt");
		File file2 = new File("f:/c.txt");
		System.out.println(file.renameTo(file2));
		
		File file5 = new File("f:/aaa");
		File file6 = new File("f:/bbb");
		System.out.println(file5.renameTo(file6));*/
		
		//如果目标文件与源文件不是在同一个路径下,那么renameTo()的作用就是剪切
//		File file3 = new File("g:/b.txt");
//		File file4 = new File("f:/b.txt");
//		System.out.println(file3.renameTo(file4));
		
		//如果目标文件与源文件不是在同一个路径下,那么renameTo()的作用就是剪切,而且还不能操作文件夹,只能操作文件。
/*		File file7 = new File("f:/bbb");
		File file8 = new File("g:/bbb");
		System.out.println(file7.renameTo(file8));  //失败 false*/		
		
		//renameTo(File dest)	重命名文件或文件夹,也可以操作非空的文件夹(相同路径),剪切(不同路径)时候不能操作非空的文件夹。
/*		File file9 = new File("f:/a");
		File file10 = new File("f:/c");//true
//		File file11 = new File("g:/c");//false
		System.out.println(file9.renameTo(file10));*/
		
		/*File src = new File("f:\\a");
		System.out.println(src.getName());*/
		
		
		
		// 使用File类和递归实现文件的剪切.
		File src = new File("f:\\a");
//		File dest = new File("f:/");
		File dest = new File("g:/");
		cutFile(src, dest);
	}
	/**
	 * 使用File类和递归实现文件的剪切.
	 * @param src
	 * @param dest
	 * @throws IOException 
	 */
	private static void cutFile(File src, File destDir) throws IOException {//   f:/a        g:/
		
		if(!src.exists() || !destDir.exists()){
			System.out.println("指定的源目录或者目标目录不存在");
			return;
		}
		if(!src.isDirectory() || !destDir.isDirectory()){
			System.out.println("指定的源目录或者目标目录不是目录");
			return;
		}
		//得到源目录名
		String srcName = src.getName();//   a
		//根据源目录名创建新目录名
		File dest = new File(destDir, srcName);
		dest.mkdir();//创建目标目录     g:/a ............
		
		//遍历源目录
		File[] listFiles = src.listFiles();
		for(File f : listFiles){
			if(f.isFile()){
				File destFile = new File(dest, f.getName());
				//如果是子源文件,使用rename()方法移动至目标目录中,该方法同时会删除源目录中的文件(剪切)
				f.renameTo(destFile);//g:/a/a.txt  ....
			}else if(f.isDirectory()){
				// 如果是子目录,执行重复动作. 将源子目录 , 目标目录(父目录+//)
				cutFile(f, new File(dest, File.separator)); // f:/a/b     // g:/a/
			}
		}
		
		//删除源目录
		src.delete();
	}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值