需求:使用字节流实现多级文件夹复制.
当然还有更简单的方法,commos-io..
PS:新手学习中...
package cn.fcs.demo;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.junit.Test;
/**
* @author fuershi
* @date 2018年2月25日 下午10:04:01
* @description 复制多级文件夹
*/
public class FileDemo05 {
/*
*
* 需求:复制多级文件夹
* 数据源: D:/temp/from
* 目的地: D:/temp/desk下
*
* 分析
* A:封装数据源、
* B:封装目的地
* C:判断该File是文件还是文件夹
* a:是文件夹
* 就在目的地下创建该文件夹
* 获取该File对象的所有文件或者文件夹对象
* 遍历得到每一个File对象
* 回到C
* b:是文件
* 复制文件
*/
@Test
public void test01() throws Exception {
File srcFile = new File("D:/temp/from");
File deskFile = new File("D:/temp/desk");
copyFolder(srcFile, deskFile);
}
/**
* @return void
* @throws Exception
* @description 文件夹复制,即创建新的文件夹
*/
public void copyFolder(File srcFile, File deskFile) throws Exception {
if (srcFile.isDirectory()) {
// 在目标目录下创建新的目录
File newFolder = new File(deskFile, srcFile.getName());
newFolder.mkdirs();
// 遍历源目录
File[] listFiles = srcFile.listFiles();
for (File file : listFiles) {
// 将源目录下的file对象再次copy
copyFolder(file, newFolder);
}
} else {
File newFile = new File(deskFile, srcFile.getName());
copyFile(srcFile, newFile);
}
}
/**
* @return void
* @throws Exception
* @description 文件复制
*/
public void copyFile(File srcFile, File newFile) throws Exception {
// 创建输入输出流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile));
byte[] buffer = new byte[1024];
int len = 0;
while ((len = bis.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
bos.close();
bis.close();
}
}
在这里如果使用commons-io工具包的话.
import org.apache.commons.io.FileUtils;
@Test
public void test02() throws IOException{
File srcFile = new File("D:/temp/from");
File deskFile = new File("D:/temp/desk02");
FileUtils.copyDirectoryToDirectory(srcFile, deskFile);
}
网友评论