package copyfloder;
/*
* 分析
* 1.创建目标文件夹
* 2.判断源文件夹是文件夹还是文件
* a,是文件夹在目标文件夹创建新的文件夹在执行2
* b,是文件直接将文件复制到目标文件夹
*/
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class MuchCopy
{
public static void main(String[] args)throws IOException
{
//封装源目录
File srcFloder = new File("e:\\Android");
//封装目标目录
File destFloder = new File("e:\\java2");
//判断目标文件是否存在
if(!destFloder.exists()){
destFloder.mkdir();
}
fileOrFloder(srcFloder,destFloder);
}
private static void fileOrFloder(File srcFloder, File destFloder)throws IOException
{
// TODO Auto-generated method stub
//判断源文件是文件夹还是文件
if(srcFloder.isDirectory()){
//创建文件夹的抽象目录
File newDestFloder = new File(destFloder,srcFloder.getName());
//调用抽象目录创建文件夹
newDestFloder.mkdir();
//获取文件夹中的文件或文件夹
File[] fileArray = srcFloder.listFiles();
//因为其为文件夹所以要判断其内容的性质循环判断
for(File file : fileArray){
fileOrFloder(file, newDestFloder);
}
}else{
//使用复制文件的方法
//注意:srcflorder必须问为源文件
// destFlorder必须为一个文件一个目标的文件
File newFile = new File(destFloder,srcFloder.getName());
copy(srcFloder,newFile);
}
}
private static void copy(File srcFloder, File destFloder)throws IOException
{
// TODO Auto-generated method stub
//字节输入流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFloder));
//封装字节输出流
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFloder));
byte[] bys = new byte[1024];
int len =0;
while((len=bis.read(bys))!=-1){
bos.write(bys,0,len);
}
//释放资源
bis.close();
bos.close();
}
}
理解:
存在递归的思想当其中含有文件夹时其操作和根目录相同都是对文件夹复制,但有许多注意事项
文件夹创建理解:
File newfloder = new File(新文件夹目录,文件夹名);
newfloder.mkdir;
指定文件所存目录和文件夹姓名,代码执行完后文件夹就创建完成了
注意:
1,创建新的文件夹后要及时变更新文件夹路径
2,复制是另开一个新的文件夹,里面的文件文件夹的名字,及创建都得手动完成,并在使用前完成。
3,复制文件是注意创建对象,注意文件名问题。
4,执行复制文件函数参数的必须是文件,两个对象都得是文件