删除某个文件或文件夹
由于File的delete方法,如果文件夹有文件的话,执行该delete是无效的, 所以代码里用到了递归删除。并且delete是直接删除了,不会放到回收站,所以使用要慎重。
import java.io.File;
public class FileUtils {
/**
* 删除文件或文件夹
*
* @param needDelFile 需要被删除的文件对象
* @return 是否成功删除干净
*/
public static boolean deleteFile(File needDelFile) {
return needDelFile != null && needDelFile.exists() && deleteFile(true, needDelFile);
}
/**
* 删除文件或文件夹
*
* @param lastFlg 上一次递归删除的结果
* @param needDelFile 需要被删除的文件对象
* @return 是否成功删除干净
*/
private static boolean deleteFile(boolean lastFlg, File needDelFile) {
//必须从里面先删除
if (needDelFile.isDirectory()) {
for (File childFile :
needDelFile.listFiles()) {
lastFlg = lastFlg & deleteFile(lastFlg, childFile);
}
}
boolean delResult = needDelFile.delete();
System.out.println("文件:" + needDelFile.getName() + ",删除:" + delResult);
return lastFlg && delResult;
}
public static void main(String[] args) {
boolean delFlg = FileUtils.deleteFile(new File("D:\\a"));
System.out.println(delFlg);
}
}
代码测试
a文件夹的结构:
上述代码控制台输出:
文件:c,删除:true
文件:c1.txt,删除:true
文件:b,删除:true
文件:b1.txt,删除:true
文件:a,删除:true
true
如果将文件c1.txt的权限设置为拒绝(文件右键 -》属性 -》 安全 -》 编辑权限)删除。
上述代码控制台输出:
文件:c,删除:true
文件:c1.txt,删除:false
文件:b,删除:false
文件:b1.txt,删除:true
文件:a,删除:false
false