用递归方式来实现删除硬盘的文件或目录(空文件夹)
首先要找到递归的入口及出口,这点很重要,成败在此,呵呵!
代码实现:
import java.io.File ;
class RecursionDeleteFileDemo //利用递归 删除 文件或目录 操作
{
public static void deleteFiles(File file)
{
//递归出口
//判断目前文件,如果是文件 或 是一个空的文件夹,则删除
if(file.isFile() || file.list().length == 0)
{
file.delete() ;
}
else
{
File[] files = file.listFiles() ;
for(File f : files)
{
//递归入口
deleteFiles(f) ;
f.delete() ;
}
}
}
}
public class RecursionDeleteFile
{
public static void main(String[] args)
{
File file = new File("E:/abc") ;
RecursionDeleteFileDemo.deleteFiles (file) ;
}
}
File[] files = file.listFiles() ;
返回: 抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件和目录
测试类程序:RecursionDeleteFileDemoTest.java
package com.junit3_8;
import java.io.File;
import java.io.IOException;
import junit.framework.Assert;
import junit.framework.TestCase;
public class RecursionDeleteFileDemoTest extends TestCase{
//测试只有一个文件的目录
public void testDeleteFiles()
{
File file = null ;
try {
file = new File("a.txt");
file.createNewFile();
RecursionDeleteFileDemo.deleteFiles(file);
} catch (IOException e) {
Assert.fail();
}
boolean result ;
//exists()判断该文件或目录是否存在
result = file.exists();//false
Assert.assertFalse(result);
}
/**
* 测试生成多层目录,目录结构如下
*
* root
* /\
* / \
* child1 child2
*
*/
public void testDeleteFiles2()
{
File directory = null ;
try {
directory = new File("root");//构造一个子目录
directory.mkdir();//建立一个新的根目录
File file0 = new File(directory,"xx.txt");
file0.createNewFile();
//在root目录下生成两个子目录
File file1 = new File(directory,"child1");
File file2 = new File(directory,"child2");
file1.mkdir();
file2.mkdir();
//分别在file3和file4目录下建一个文本文件
File file3 = new File(file1,"a.txt");
File file4 = new File(file2,"b.txt");
file3.createNewFile();
file4.createNewFile();
RecursionDeleteFileDemo.deleteFiles(directory);
}
catch(Exception e)
{
Assert.fail();
}
Assert.assertNotNull(directory);
String[] str = directory.list();
Assert.assertEquals(0, str.length);
directory.delete();//删除根目录
}
}