本人最近初学java,学习过程中将一些案列记录下。一希望得到大神的指点,二留作纪念,三希望可以给后来者一点点帮助。废话不多说了,下面的案列实现整体复制一个文件夹中的文件的功能(不能复制空白文件夹,文件夹中必须有文件)。

第一步说下实现思路:1,获取原文件夹中的所有文件(保存在集合中);2,根据目标路径修改原文件夹中的文件的路径;3,在目标路径中按原文件的路径深浅生成新的文件夹;4,生成文件夹完毕,创造原文件同名的空白文件;5,将原文件的内容复制到第四步创建的空白文件中;6,循环第2,3,4,5步即可完成。

第二步代码实现:

/**************************************************代码********************************************************/
/**
	 * 复制文件及文件夹
	 * @param oldPath 原路径
	 * @param newPath 新路径
	 * @return 复制成功返回true
	 * @throws IOException  抛出异常
	 */
	public static boolean copyAllDirAndFile(String oldPath, String newPath)
			throws IOException {
		ArrayList<File> files = new ArrayList<File>();// 新建一个接收oldPath路径中所有文件的集合
		String rootFloder = oldPath.substring(oldPath.lastIndexOf("\\") + 1);// 获取要复制的文件夹的名字
		files = getAllFiles(oldPath, files);// 获取oldPath路径中的全部文件
		if (!files.isEmpty()) {
			for (File file : files) {// 遍历文件集合
				String fileNewPath = newPath + rootFloder;// 将原路径替换为新路径
				String fileFullPath = file.getAbsolutePath().substring(
						oldPath.length() + 1);// 生成每一个文件的全路径
				String[] filePath = fileFullPath.split("\\\\");// 获取每一个路径的名字,即文件夹的名字
				for (String str : filePath) {
					File newFile = new File(fileNewPath);
					newFile.mkdir();// 按路径深浅生成文件夹
					fileNewPath = fileNewPath + "\\" + str;// 按照文件路径深浅重新处理路径
				}
				File newFile = new File(fileNewPath);// fileNewPath为文件路径,此处fileNewPath与fileFullPath一样
				newFile.createNewFile();// 生成空白文件
				copyFile(file.getAbsolutePath(), newFile.getAbsolutePath());// 将原文件复制到空白文件
			}
			return true;
		}
		return false;
	} 
/**
	 * 获取某文件夹的所有文件
	 * @param filePath 获取文件的文件夹路径
	 * @param myFiles 保存文件的文件集合
	 * @return  文件集合
	 * @throws IOException
	 */
	public static ArrayList<File> getAllFiles(String filePath,
			ArrayList<File> myFiles) throws IOException {// 由于要递归调用函数本身,用形参做该函数的返回值
		File file = new File(filePath);
		if (file.exists()) {// 判断文件夹是否存在
			for (File fi : file.listFiles()) {// 遍历文件夹
				if (fi.isDirectory()) {
					getAllFiles(fi.getCanonicalPath(), myFiles);// 如果是目录则递归调用
				} else {
					myFiles.add(fi);// 如果是文件则添加到集合中
				}
			}
		}
		return myFiles;// 返回集合
	} 
/**
	 * 复制文件
	 * @param fileFrom 源文件路径
	 * @param fileTo 新文件路径
	 * @throws IOException  异常
	 */
	public static void copyFile(String fileFrom, String fileTo)
			throws IOException {
		FileInputStream in = new FileInputStream(fileFrom);// 输入流
		FileOutputStream out = new FileOutputStream(fileTo);// 输出流
		byte[] buffer = new byte[1024];// 定义一个 1024字节的缓冲区
		while (in.read(buffer) != -1) {
			out.write(buffer);// 将缓冲区的数据写入
		}
		in.close();// 关闭输入流
		out.close();// 关闭输出流
	}

谢谢各位大神的阅读,小弟不甚感激!请各位大神在阅读的同时指出我的错误,再次感谢!