![0836b5df3e6e9cce62e5ab3d43b0d912.png](https://i-blog.csdnimg.cn/blog_migrate/a0ff2491552836e94300849fb9a9005b.jpeg)
学习了这么多的流,以及文件操作的知识,我们需要用一个实际问题来检验我们对于程序的理解,学习编程一定要能够解决实际问题,在解决实际问题中,学到更多的知识,我们是以解决需求为目的,而不是为了学习编程而编程的。
文件夹的复制就当做我们学习程序的验证。
文件夹复制的程序编写思路:
1.先实现复制一个文件。
2.实现复制指定文件夹下的所有文件。
3.实现对于目录进行遍历,对于文件进行复制。
1. 实现复制一个文件的函数如下:
public
2. 实现复制指定文件夹下的所有文件。
public static void copyDir(File srcDir, File targetDir) throws IOException{
if(!targetDir.exists()){
targetDir.mkdir(); // 如果文件目录不存在,则创建一个文件目录
}
File [] fileList = srcDir.listFiles(); // 获取原目录下的所有文件
for(File file: fileList){
if(file.isFile()){
copyFile(new File(srcDir+file.separator+file.getName()), new File(targetDir+file.separator+file.getName()));
}
else{
// copyDir(srcDir, targetDir);
// 下面这句代码是用递归实现对目录下文件的遍历。
//copyDir(new File(srcDir+file.separator+file.getName()), new File(targetDir+ file.separator+file.getName()));
}
}
}
3. 实现对于目录进行遍历,对于文件进行复制。
public static void copyDir(File srcDir, File targetDir) throws IOException{
if(!targetDir.exists()){
targetDir.mkdir(); // 如果文件目录不存在,则创建一个文件目录
}
File [] fileList = srcDir.listFiles(); // 获取原目录下的所有文件
for(File file: fileList){
if(file.isFile()){
copyFile(new File(srcDir+file.separator+file.getName()), new File(targetDir+file.separator+file.getName()));
}
else{
// copyDir(srcDir, targetDir);
// 下面这句代码是用递归实现对目录下文件的遍历。
copyDir(new File(srcDir+file.separator+file.getName()), new File(targetDir+ file.separator+file.getName()));
}
}
}
完整代码:
package com.sxt.Java14.Serializable;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class TestCopy {
public static void copyDir(File srcDir, File targetDir) throws IOException{
if(!targetDir.exists()){
targetDir.mkdir(); // 如果文件目录不存在,则创建一个文件目录
}
File [] fileList = srcDir.listFiles(); // 获取原目录下的所有文件
for(File file: fileList){
if(file.isFile()){
copyFile(new File(srcDir+file.separator+file.getName()), new File(targetDir+file.separator+file.getName()));
}
else{
// copyDir(srcDir, targetDir);
// 下面这句代码是用递归实现对目录下文件的遍历。
copyDir(new File(srcDir+file.separator+file.getName()), new File(targetDir+ file.separator+file.getName()));
}
}
}
public static void copyFile(File srcFile, File targetFile) throws IOException{
/**
* 实现复制一个文件
*/
BufferedInputStream fis = new BufferedInputStream(new FileInputStream(srcFile));
BufferedOutputStream fos = new BufferedOutputStream(new FileOutputStream(targetFile));
byte[] buf = new byte[1024];
int len =0;
while((len=fis.read(buf))!=-1){
fos.write(buf,0, len);
fos.flush();
}
fos.close();
fis.close();
}
public static void main(String[] args) throws IOException {
File srcFile= new File("E:testCopy");
File targetFile= new File("E:testCopy1");
// copyFile(srcFile, targetFile);
copyDir(srcFile,targetFile);
}
}
感谢各位读者的支持~