要求:把E盘的aaa文件夹所有内容(含aaa文件夹)复制到F盘
实现思路:
- 把E盘aaa文件夹的文件路径封装为一个File对象
- 创建一个复制函数,函数参数file为一个File对象
- 在复制函数中
- 第一步:判断参数file的路径是否存在,存在进入第二步,不存在输出
- 第二步:使用getPath()方法得到参数的文件路径,并替换为F盘路径,然后封装到一个File对象destFile
- 第三步:判断file路径是否是一个文件夹结尾
- 第四步:如果是,得到起所有子文件(含文件夹)并遍历,在遍历中给destFile创建文件夹,然后递归复制函数
- 第五步:如果不是,即以文件结尾,读取该文件并复制到F盘相对应得目录下
- 具体代码如下:
import java.io.*;
public class CopyDemo {
public static void main(String[] args) throws Exception {
long start = System.currentTimeMillis();
String path = "E:/aaa";//文件夹(绝对)路径
File file = new File(path);
copyFile(file);
long end = System.currentTimeMillis();
System.out.println("复制共耗时:"+(end-start)+"毫秒");
}
private static void copyFile(File file) throws Exception {
//判断file对象的文件路径是否存在
if(file.exists()){
//F盘文件路径,File对象无论路径存在与否都可以创建
File destFile = new File(file.getPath().replace("E:","F:"));
if(file.isDirectory()){
//file路径是文件夹结尾
File[] files = file.listFiles();//file的子文件
// 因为file是文件夹结尾才进入此for循环,所以此处destFile也是文件夹结尾
for (File f :
files) {
if(!destFile.exists()){
//目标文件夹不存在则创建
destFile.mkdir();
}
copyFile(f);//递归
}
}else{
//file路径是文件结尾,那么destFile路径也是文件结尾
//读取文件对象
InputStream is = new FileInputStream(file);
//写入文件对象
OutputStream os = new FileOutputStream(destFile);//destFile路径文件不存在会自动创建
int len;//读取的有效字节个数
byte[] b = new byte[1024];
while ((len=is.read()) != -1){
//读取操作返回值为-1则说明读取完毕
os.write(len);//写入数据
}
is.close();//关闭写入
os.close();//关闭读取
}
}else{
System.out.println(file.getPath()+"不存在");
}
}
}