递归删除文件和目录

来源:互联网 发布:大数据 选股 编辑:程序博客网 时间:2024/06/04 19:45

本来是件很简单的问题,但是由于没有深刻理解文件句柄,导致将自己绕进去。

递归代码如下:

private static void deleteFiles(File file) {//File tempFile = null;if(file.isDirectory()){File[] fileList = file.listFiles();for(int i=0; i<fileList.length; i++){//tempFile = file.listFiles()[i];if(fileList[i].isDirectory()){deleteFiles(fileList[i]);}else{//tempFile.delete();if(fileList[i].isFile()){fileList[i].delete();}}}file.delete();}else{if(file.isFile()){file.delete();}}}public void deleteFile() {File file = new File("E:\\IASHOME");deleteFiles(file);}


当执行该方法时,我打开了文件目录到要删除的文件,最终该文件和其上级目录被删除,在往上的目录并没有被删除。

原因是当打开文件的时候,文件的句柄就被我们占住了,此时删除句柄并没有删除无法删除。

什么是句柄(http://www.linuxidc.com/Linux/2011-04/35002.htm)