A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© _J2EE_LiXiZhen 中级黑马   /  2017-11-19 22:53  /  858 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

从控制台获取输入的文件目录然后将该目录(包含子目录)下的.java文件复制到D:/java文件夹中,并统计java文件的个数.
提示:如果有相同的名称的文件,如果两个Test01.java,则拷贝到目标文件夹时只能有一个Test01.java,
另一个Test01.java要修改为另一个名称:该名称可随机生成,只要不重复即可

[Java] 纯文本查看 复制代码
public class Test03 {
	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入要复制的文件夹路径:");
		String path = sc.nextLine();
		// 创建源文件对象
		File srcDir = new File(path);
		// 创建目标文件对象
		File destDir = new File("C:\\Users\\Administrator\\Desktop\\practice2");

		// 拷贝文件夹
		copyDir(srcDir, destDir);
	}

	// 复制方法
	public static void copyDir(File srcDir, File destDir) throws IOException {
		// 判断源文件是否存在,不存在直接退出
		if (!srcDir.exists()) {
			System.out.println("源文件不存在!");
			return;
		}
		// 判断是否是文件夹
		if (srcDir.isDirectory()) {
			File[] fileList = srcDir.listFiles();
			for (File f : fileList) {
				copyDir(f, destDir);
			}
		} else {
			// 如果不是文件夹即是文件,文件直接拷贝
			// 创建字节输入流对象
			BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcDir));
			// 创建要复制的文件
			File destFile = new File(destDir, srcDir.getName());

			// 判断当前目录下是否有重名文件
			if (destFile.exists()) {
				// 如果存在就改名
				Random r = new Random();
				String[] arr = srcDir.getName().split("\\.");
				StringBuilder builder = new StringBuilder();
				//采用三位随机数字拼接的方式防止重名
				builder.append(arr[0]).append(r.nextInt(10)).append(r.nextInt(10)).append(r.nextInt(10)).append(".").append(arr[1]);
				String child = builder.toString();
				destFile = new File(destDir, child);
			}

			// 创建字节输出流对象
			BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));

			byte[] b = new byte[1024 * 8];
			int len;
			// 写入目标文件夹
			while ((len = bis.read(b)) != -1) {
				bos.write(b, 0, len);
				bos.flush();
			}
			bos.close();
			bis.close();
		}
	}
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马