思路
1 文件复制
本质就是输入和输出
1.1 完成文件输入,读取文件
1.2 完成文件输出
1.3 整合输入和输出完成复制
2 获取目录下所有子目录
2.1 获取目录对象
2.2 获取该目录下所有直接子目录
2.3 递归获取子目录下面的子目录(获取后代目录)
3 整合代码
3.1 获取所有后代目录后,得到每一个文件对象
3.2 通过文件对象就可以获取该文件的全路径
3.3 有了全路径,就可以创建流对象
3.4 然后就能完成复制功能
1 文件复制代码实现
代码:
package day03;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Copy_01 {
public static void main(String[] args) {
try(FileInputStream fis=new FileInputStream("源文件");
BufferedInputStream bis=new BufferedInputStream(fis);
FileOutputStream fos=new FileOutputStream("目标文件");
BufferedOutputStream bos=new BufferedOutputStream(fos);){
byte[] bytes=new byte[10240000];
int count=0;
while((count=bis.read(bytes))!=-1){
fos.write(bytes, 0, count);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
2 获取目录下所有子目录
代码:
package day03;
import java.io.File;
import java.io.FileInputStream;
import javax.swing.Box.Filler;
public class Copy_02 {
public static void main(String[] args) {
File file=new File("D:/a");//源文件目录
Copy2(file);
}
public static void Copy2(File file){
if(file.isFile()){
System.out.println(file.getPath());
}
else{
File[] files=file.listFiles();
for(File subString: files){
Copy2(subString);
}
}
}
}
3 整合代码
代码:
package day03;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Copy_all {
public static void main(String[] args) {
File file=new File("D:/a");
copy(file);
}
public static void copy(File file){
if(file.isFile()){
System.out.println(file.getPath());
String newpath="E"+file.getPath().substring(1, file.getPath().length());
File newFile = new File(newpath);
// 获取父文件对象
File parentFile = newFile.getParentFile();
// 不存在就创建
if (!parentFile.exists()) {
parentFile.mkdirs();
}
try(FileInputStream fis=new FileInputStream(file.getPath());
BufferedInputStream bis=new BufferedInputStream(fis);
FileOutputStream fos=new FileOutputStream(newpath);
BufferedOutputStream bos=new BufferedOutputStream(fos);){
byte[] bytes=new byte[10240000];
int count=0;
while((count=bis.read(bytes))!=-1){
fos.write(bytes, 0, count);
}
} catch (Exception e) {
e.printStackTrace();
}
}else {
File[] files=file.listFiles();
for(File subString:files){
copy(subString);
}
}
}
}