Java io流—拷贝文件夹下的所有文件和目录
代码:
package demo01;
import java.io.*;
import java.util.TreeMap;
public class CopyAll {
public static void main(String[] args) {
//拷贝源
File srcFile = new File("E:\\学习\\a");
//拷贝目标
File destFile = new File("C:\\Users\\22721\\Desktop");
//调用copyDri方法
copyDri(srcFile,destFile);
}
/**
* 拷贝目录
* @param srcFile 拷贝源
* @param destFile 拷贝目标
*/
private static void copyDri(File srcFile, File destFile) {
if (srcFile.isFile()){
//src.File
//是文件就拷贝,且边读边写
FileInputStream in = null;
FileOutputStream out = null;
File file;
try {
//读srcFile这个文件
in = new FileInputStream(srcFile);
String path = destFile.getAbsolutePath() + srcFile.getAbsolutePath().substring(2);
out = new FileOutputStream(path);
//一边读一边写
//一次性复制1m
byte[] bytes = new byte[1024*1024];
int readCount = 0;
while ((readCount= in.read(bytes))!=-1){
out.write(bytes,0, readCount);
}
out.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if (out!=null){
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (in!=null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//srcFile如果是一个文件,结束递归
return;
}
//获取源下面的子目录(拿到当前文件夹srcFile下的子文件)
File[] files = srcFile.listFiles();
//代码测试(写一点测试一点)
//System.out.println(files.length);
for (File file:files) {
//获取所有文件的绝对路径(包括目录和文件)
//System.out.println(file.getAbsolutePath());
//这个file可能是文件或者目录
//
if (file.isDirectory()){
//System.out.println(file.getAbsolutePath());
String srcDri = file.getAbsolutePath();
//获取原目标路径,去掉前两位(E:\\学习\\a)---->(\\学习\a)
//System.out.println(srcDri.substring(2));
String destDri = destFile.getAbsolutePath() + srcDri.substring(2);
File newFile = new File(destDri);
//如果newFile不存在,则新建
if (!newFile.exists()){
newFile.mkdirs();
}
//测试输出文件路径
//System.out.println(destDri);
}
copyDri(file,destFile);
}
}
}
运行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mheHUHjk-1632819036120)(https://i.loli.net/2021/09/28/VZvYoL4k8TnO7Mr.png)]
运行后文件被拷贝到桌面(目标文件夹):