- 需求:复制多级文件夹
- 数据源:E:/Shadowsocks-win-2.5.2/test2
- 目的地:E:
- 将该多级文件夹整个复制到e盘根目录
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/*思路:
* 复制多级文件夹的流程:
* A:封装数据源File
* B:封装目的地File
* C:判断该File是文件夹还是文件
* a:是文件夹
* 就在目的地目录下创建该文件夹
* 获取该File对象下的所有文件或者文件夹File对象
* 遍历得到每一个File对象
* 回到C(递归调用)
* b:是文件
* 就复制(字节流) 可以写一个函数来完成复制功能 */
/**
* @author Administrator
*
*/
public class Java_2
{
public static void main(String[] args)
{
// 创建指向源文件和目标文件夹的实例
File file = new File("E:\\Shadowsocks-win-2.5.2\\test2");
File file2 = new File("E:");
findFiles(file, file2);
}
/**
* 判断多级文件夹文件并复制的方法
* @param file
* @param file2
*/
public static void findFiles(File file, File file2)
{
if (file.exists())
{
if (file.isFile())
{// 是文件的话直接复制到目标文件夹内,并打印文件路径
copyFiles(file, file2);
System.out.println(file.getAbsolutePath() + "已创建");
}
else if (file.isDirectory())
{// 是文件夹的话创建指向新目录的文件实例,调用mkdirs创建多级文件夹
File file5 = new File(file2.getAbsolutePath() + "\\"
+ file.getName());
file5.mkdirs();
// 接收此文件夹下所有文件目录 实例
File[] file3 = file.listFiles();
// 递归出口
if (file3 == null)
{
return;
}
// 遍历文件,递归,循环判断
for (File file4 : file3)
{
findFiles(file4, file5);
System.out.println(file5.getAbsolutePath() + "已创建");
}
}
}
else
{
return;
}
}
/**
* 把file的内容复制到file2的方法
* @param file
* @param file2
*/
public static void copyFiles(File file, File file2)
{
FileInputStream fis;
FileOutputStream fos;
// 包装流 带缓冲区
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try
{
fis = new FileInputStream(file);
fos = new FileOutputStream(file2.getAbsolutePath() + "\\"
+ file.getName());
bis = new BufferedInputStream(fis);
// 构造10M的缓冲区
bos = new BufferedOutputStream(fos, 10 * 1024 * 1024);
// 文件格式多样,用字节流逐块接收
byte[] bytes = new byte[1024];
int len = 0;
// 记录复制时间 逐块读取到内存并写出到新文本
long start = System.currentTimeMillis();
while ((len = bis.read(bytes, 0, 1024)) != -1)
{
bos.write(bytes, 0, len);
}
long end = System.currentTimeMillis();
System.out.println("复制" + file.getName() + "花费时间" + (end - start)
+ "ms");
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
if (bis != null)
{
try
{//关闭流
bis.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
if (bos != null)
{
try
{
bos.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
}
输出结果:
复制RAR 压缩文件.rar 花费时间0ms
E:\Shadowsocks-win-2.5.2\test2\RAR 压缩文件.rar已创建
E:\test2已创建
复制新建文本文档.avi 花费时间0ms
E:\Shadowsocks-win-2.5.2\test2\tstst\新建文本文档.avi已创建
E:\test2\tstst已创建
复制肖4配套视频.flv 花费时间1330ms
E:\Shadowsocks-win-2.5.2\test2\tstst\肖4配套视频.flv已创建
E:\test2\tstst已创建
复制酬勤考资全自动播放器.exe 花费时间33ms
E:\Shadowsocks-win-2.5.2\test2\tstst\酬勤考资全自动播放器.exe已创建
E:\test2\tstst已创建
E:\test2已创建
复制新建位图图像.bmp 花费时间0ms
E:\Shadowsocks-win-2.5.2\test2\新建位图图像.bmp已创建
E:\test2已创建