本人最近初学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();// 关闭输出流
}
谢谢各位大神的阅读,小弟不甚感激!请各位大神在阅读的同时指出我的错误,再次感谢!