实现将D盘中的文件全部拷贝到C盘
public class copeFile {
public static void main(String[] args) {
//将D:\C__Project拷贝到C盘根目录下
File fromFile = new File("D://C__Project");
File toFile = new File("C:");
copy(fromFile,toFile);
}
//将文件路径下的所有file都存到一个数组中
public static void getAllFile(File file,List<File> allFileName){
if(file.exists()&&file.isDirectory()){
//方法listFiles()是获取该对象file路径下的所有文件
//通过循环遍历每个子文件
//然后通过递归,子文件又调用listFiles()方法。
//当子文件不是路径是file或者为空时结束递归。
File[] files=file.listFiles();
for (File f :files){
allFileName.add(f) ;
getAllFile(f,allFileName);
}
}
}
//copy方法
public static void copy(File fromFile,File toFile){
List<File> all=new ArrayList<>() ;
getAllFile(fromFile,all);
for (File source:all){
//获取目标路径
String s1=source.getAbsolutePath().substring(3) ;
String s2=toFile.getAbsolutePath() ;
String s3=s2.endsWith("//")? s2:s2+"//"+s1 ;
//建立拷贝目标文件对象
File aim=new File(s3);
//如果源文件是路径,就创建目标路径
if(source.isDirectory()){
aim.mkdirs() ;
System.out.println("路径拷贝成功!");
}
//如果源文件是文件,就开始拷贝
if (source.isFile()){
copyDoc(source,aim);
System.out.println("文件拷贝成功!");
}
}
}
//文件拷贝方法
public static void copyDoc(File from, File to) {
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(from);
fos = new FileOutputStream(to, true);
byte[] bytes = new byte[1024 * 512];
int count = 0;
while ((count = fis.read(bytes)) != -1) {
fos.write(bytes, 0, count);
}
fos.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fis!=null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
看看结果
源D盘文件
执行后C盘文件
欢迎纠错或补充。