Java基础知识之将源目标中的所有文件拷贝到另一个文件当中
程序员文章站
2022-06-16 13:50:12
...
import java.io.*;
/**
* 将F:\学校文档\编程语言中的所有文件复制到D:\a\b\c\test
*/
public class CopyAll {
public static void main(String[] args) {
// 拷贝源
File srcFile=new File("F:\\学校文档\\编程语言");
// 拷贝目标
File destFile=new File("D:\\a\\b\\c\\test");
System.out.println(destFile.getAbsolutePath());//D:\a\b\c\test
// 调用方法拷贝
copyDir(srcFile,destFile);
}
/**
* 拷贝目录
* @param srcFile 拷贝源
* @param destFile 拷贝目标
*/
private static void copyDir(File srcFile, File destFile) {
// srcFile如果是一个文件的话,递归结束。
// 是文件的时候需要拷贝。
// ....一边读一边写。
if(srcFile.isFile()){
FileInputStream fis=null;
FileOutputStream fos=null;
try {
// 读源文件 F:\学校文档\编程语言
fis=new FileInputStream(srcFile);
//判断目标文件D:\a\b\c\test的绝对路径是否以\结尾
//如果是则直接将源文件的绝对路径F:\去掉加到目标路径D:\a\b\c\test之后
//变成新的绝对路径D:\a\b\c\test\学校文档\编程语言
//如果不是以\结尾则加上\在执行以上操作
String path=(destFile.getAbsolutePath().endsWith("\\")?destFile.getAbsolutePath():destFile.getAbsolutePath()+"\\")
+srcFile.getAbsolutePath().substring(3);
// 将新的目标文件绝对路径path写入
fos=new FileOutputStream(path);
// 一边读一边写 一次读1MB
byte[] bytes=new byte[1024*1024];
int readCount=0;
while((readCount=fis.read(bytes))!=-1){
fos.write(bytes,0,readCount);
}
fos.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(fis!=null){
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(fos!=null){
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return;
}
//代码执行到此处说明srcFile是一个目录则获取源目录下面的子目录
File[] files=srcFile.listFiles();
for (File f:files) {
if(f.isDirectory()){
//获取子目录的绝对路径
String srcDir=f.getAbsolutePath();
String desDir=(destFile.getAbsolutePath().endsWith("\\")?destFile.getAbsolutePath():destFile.getAbsolutePath()+"\\")
+srcDir.substring(3);
//新建对应目录
File newFile=new File(desDir);
if(!newFile.exists()){
newFile.mkdirs();
}
}
//递归调用
copyDir(f,destFile);
}
}
}