####需求
实现单个文件的删除、拷贝计较简单,那么当文件夹下有文件和文件夹,有多层目录,应该怎么操作呢?是的,使用递归操作。
代码中用到FileInputStream、FileOutputStream进行流操作。
####代码实现
#####删除文件夹及其子文件(夹)
/**
* @Title: test1
* @Description: 删除文件夹及其子文件
* @throws Exception void
* @author Cheng
* @date 2018年7月11日上午11:34:22
*/
@Test
public void test1() throws Exception
{
String path = "F:" + File.separator + "booway" + File.separator + "Java" + File.separator + "0711"
+ File.separator + "test";
File file = new File(path);
// 调用递归删除
deleteAll(file);
}
// 递归删除
public void deleteAll(File file)
{
if (file.isDirectory())//是文件夹
{
File[] files = file.listFiles();
if (files.length > 0)
{
// 递归删除文件夹下文件或者文件夹
for (File file2 : files)
{
deleteAll(file2);
}
}
// 删除文件夹或文件夹
file.delete();
} else
{//是文件直接删除
file.delete();
}
}
#####拷贝文件夹及其子文件(夹)
/**
* @Title: test2
* @Description: 拷贝文件和文件夹
* @throws Exception void
* @author Cheng
* @date 2018年7月11日上午11:33:55
*/
@Test
public void test2() throws Exception
{
// 源路径
String path1 = "F:" + File.separator + "booway" + File.separator + "Java" + File.separator + "0711"
+ File.separator + "test";
File file1 = new File(path1);
// 目标路径
String path2 = "F:" + File.separator + "booway" + File.separator + "Java" + File.separator + "0711"+ File.separator + "test2";
File file2 = new File(path2);
if (!file2.exists())
{
file2.mkdirs();
}
// 调用拷贝拷贝
copyAll(file1, file2);
}
// 递归拷贝
public void copyAll(File file1, File file2) throws Exception
{
// 列出文件夹中文件或者文件夹
File[] files = file1.listFiles();
if (files.length > 0)
{
// 遍历
for (File file3 : files)
{
System.out.println(file3);
if (file3.isDirectory())//是文件夹,创该文件夹后再拷贝文件夹下的文件
{
// 创该新文件夹
File file4 = new File(file2.toString() + "" + File.separator + "" + file3.getName());
file4.mkdir();
//递归
copyAll(file3, file4);
} else//是文件直接拷贝到当前目录
{
FileInputStream inputStream = new FileInputStream(file3);
// 目标路径
FileOutputStream outputStream = new FileOutputStream(
file2 + "" + File.separator + "" + file3.getName());
/*byte[] b = new byte[1024];
int len = 0;
int temp = 0;
// 读取文件
while ((temp = inputStream.read()) != -1)
{
b[len] = (byte) temp;
len++;
}*/
byte[] buffer = new byte[1024 * 1024];
while (true)
{
if (inputStream.read(buffer) <= 0)
{
break;
}
outputStream.write(buffer);
}
// 写文件
// outputStream.write(b);
// 关闭资源
outputStream.flush();
outputStream.close();
inputStream.close();
}
}
}
}
###完…