通过控制台传入两个路径,一个复制的路径,一个粘贴的路径
注: 不能复制系统文件
public class Demo9 {
public static void main(String[] args) {
String copyPath = "F:\\图片";//复制路径
String pastePath = "F:\\文件夹";//粘贴路径
try {
copyFile(copyPath,pastePath);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
* 复制一个文件夹,传入两个路径
* @param copyPath 需要复制的文件夹路径(此路径不能为空)
* @param pastePath 需要粘贴的位置(文件可以不存在)
* @throws Exception
*/
public static void copyFile(String copyPath,String pastePath) throws Exception{
// 2.创建目标文件的file对象
File copyFile = new File(copyPath);
//创建粘贴的文件夹
File pasteFile = new File(pastePath);
pasteFile.mkdirs();
// 3.获取目标路径下的所有子文件和文件夹
File[] files = copyFile.listFiles();
// 4.遍历子文件集合,判断是文件还是路径
for (File file : files) {
if (file.isFile()){
//如果有文件,则粘贴的位置需要创建相同的文件
String name = file.getName();//获取复制的文件的名字
String path = pasteFile.getAbsolutePath()+"\\"+name;//需要创建的文件路径
File ziFile = new File(path);
pasteFile.createNewFile();//创建文件
// 5.如果是文件,直接复制过去
// 5.1 创建一个输入字节流
FileInputStream fis = new FileInputStream(file.getAbsolutePath());
// 5.2 创建一个输出字节流
FileOutputStream fos = new FileOutputStream(ziFile);
// 5.3 定义一个数组,接收的得到的字节
byte[] bys = new byte[1000];
int len;
// 5.4 只要满足还有字节就一直循环获取字节
while ((len = fis.read(bys)) != -1){
// 5.5 写出数据
fos.write(bys,0,len);//存入
}
// 5.6 关闭流
fos.close();
fis.close();
}
// 6.如果是文件夹,递归1-6
if (file.isDirectory()){
//粘贴的位置需要创建跟复制一样的文件夹
String name = file.getName();//获取复制的文件夹的名字
String path = pasteFile.getAbsolutePath()+"\\"+name;//需要创建的文件夹路径
File ziFile = new File(path);
pasteFile.mkdir();//创建文件夹
copyFile(file.getAbsolutePath(),ziFile.getAbsolutePath());
}
}
}
}
转载于:https://www.cnblogs.com/yanjiexiansheng/p/10636935.html