由于项目需要,要定时的把文件和目录删掉,以前很少做文件删除,都是去创建文件和读取文件,就找到了java的api文档去看有没有删除的方法,找到File类,java的File没有目录与文件的区分,都用File类表示,找到了一个方法。
可怎么测试就是删除不了,文件加依然存在,郁闷了,没办法就硬着去读file.delete()方法的说明文档
Deletes the file or directory denoted by this abstract pathname. If this pathname denotes a directory, then the directory must be empty in order to be deleted.
大意就是删除一个File类代表的文件或目录,如果是目录,这个目录必须为空。
原来是这样,要删除目录,必须先删除子目录。就自己参考着别人的写了个删除的方法,给遇到同样问题的一个参考。代码如下
测试代码
File.delete();
可怎么测试就是删除不了,文件加依然存在,郁闷了,没办法就硬着去读file.delete()方法的说明文档
Deletes the file or directory denoted by this abstract pathname. If this pathname denotes a directory, then the directory must be empty in order to be deleted.
大意就是删除一个File类代表的文件或目录,如果是目录,这个目录必须为空。
原来是这样,要删除目录,必须先删除子目录。就自己参考着别人的写了个删除的方法,给遇到同样问题的一个参考。代码如下
package com.own;
import java.io.File;
public class FileUtil {
/**
* 把整个目录(包括子目录)从硬盘中删除掉
* @param parent 目录
* @return
*/
public static boolean removeDiectory(File parent){
boolean isSuccess = false;
if(parent == null){
throw new IllegalArgumentException("目录为空");
}
if(parent.isFile()){
throw new IllegalArgumentException("参数必须是文件");
}
//列出子文件(只包括子文件不包括子文件的子文件)
File[] childFiles = parent.listFiles();
for(File file : childFiles){
//如果是目录递归的调用
if(file.isDirectory()){
isSuccess = removeDiectory(file);
}else{
isSuccess = file.delete();
}
}
//删除顶级目录
isSuccess = parent.delete();
return isSuccess;
}
}
测试代码
public class FileUtilTest {
private File parent;
@Before
public void setUp() throws IOException{
parent = new File("d:/aa");
parent.mkdir();
File subfile = new File(parent,"bb");
subfile.mkdir();
subfile = new File(subfile,"test.txt");
subfile = new File(parent,"cc/dd");
subfile.mkdirs();
subfile.createNewFile();
subfile = new File(subfile,"bb.txt");
subfile.createNewFile();
}
@Test
public void testRemoveDiectory() {
boolean actual = FileUtil.removeDiectory(parent);
Assert.assertEquals(true,actual);
}