用java复制指定文件夹
程序员文章站
2024-03-09 10:00:17
...
通过IO流复制指定文件夹到指定目录(Java)
思路
- 1、复制子文件夹
- 1)、创建源
- 2)、创建下级File对象
- 3)、判断目标文件夹是否存在
- 4)、判断是文件夹还是文件(若为文件夹则改变目标源)
- 5)、若是文件夹则创建该文件夹的对象再进行递归,否则复制文件
- 2、复制文件
- 1)、选择流
- 2)、操作
- 3)、释放资源
代码
public class Copy_dir {
public static void main(String[] args) {
String srcPath = "C:/Users/xxx's_computer/eclipse-workspace/IO_study01/src";
String destPath = "C:/Users/xxx's_computer/eclipse-workspace/IO_study02/dir/test";
copyDir(srcPath, destPath);
}
public static void copyDir(String srcPath, String destPath) {
//创建源
File src = new File(srcPath);
File dest = new File(destPath);
//创建下级File对象
File [] fileArray = src.listFiles();
//判读那目标文件夹是否存在
if (!dest.exists()) {
dest.mkdirs();
}
for (File file : fileArray) {
//判断是文件夹还是文件
if (file.isDirectory()) {
String Name = file.getName();
File newDest = new File(dest, Name);
//递归,用来复制源文件的所有文件夹(不含文件)
copyDir(file.getPath(), newDest.getPath());
} else {
String fileName = file.getName();
File destFile = new File(dest, fileName);
copy(file, destFile);
}
}
}
public static void copy(File file, File destFile) {
//选择流,分别为输入、输出流
InputStream is = null;
OutputStream os = null;
try {
is = new FileInputStream(file);
os = new FileOutputStream(destFile);
byte [] dirsDatas = new byte[1024*100];//缓冲容器
int len = -1;
while((len = is.read()) != -1) {
os.write(dirsDatas);
}
os.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
//释放资源 原则: 分别关闭,先打开的后关闭
try {
if (os != null) {
os.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if (is != null) {
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}