递归删除文件和目录

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

递归代码如下:

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)

你可能感兴趣的:(递归删除文件和目录)