JAVA递归删除目录失败

今天一位运维兄弟不小心在服务器上创建了无限递归的目录,急冲冲的拜托我帮忙。
好的,直接写了一个递归删除目录。

import java.io.File;

/*
 * 递归删除目录
 */
public class Test {
	public static void main(String[]args){
		File f1 = new File("d:\\Bytter\\1");
		
		Test t = new Test();
		
		if(f1.isDirectory()){
			t.deleteAllFiles(f1);
		}
	}
	
	private void deleteAllFiles(File f) {  
	   if(f.exists()) {  
           File[] files = f.listFiles(); 
           if(files != null) {  
        	   for(int i =0; i < files.length; i++){
        		   File file =files[i];
                   if(file.isDirectory()) {  
                       deleteAllFiles(file);  
                       boolean b = file.delete(); 
                       if(b){
                    	   System.out.println("删除目录" + file.getName() + "成功!");
                       }else{
                    	   System.out.println("删除目录" +  file.getPath() +"___" + file.getName() + "失败!");
                       }
                   }  
                   else if(file.isFile()) {  
                	   boolean b =  file.delete();  
                	   if(b){
                    	   System.out.println("删除文件" + file.getName() + "成功!");
                       }else{
                    	   System.out.println("删除文件" +  file.getPath() +"___" + file.getName() + "失败!");
                       }
                   }  
        	   }
           }  
       }  
   }  
}



结果却出乎意料,一个递归目录删除,而另外一个死活删除不掉。刚开始怀疑是文件被占用,后来排除,之后尝试了各种工具,文件粉碎器都没有解决。
file.delete()返回false,为什么呢?

后来发现file.renameTo()返回成功,然后修改如下:


import java.io.File;

/*
 * 批量重命名,然后用Test.java
 */
public class Test1 {
	private long no = 0;
	public static void main(String[]args){
		File f1 = new File("d:\\Bytter\\1");
		Test1 t = new Test1();
		
		File f3 = new File("d:\\Bytter\\temp");
		if(!f3.exists()){
			f3.mkdirs();
		}
		
		if(f1.isDirectory()){
			t.deleteAllFiles(f1);
		}
	}
	
	private void deleteAllFiles(File f) {  
	   if(f.exists()) {  
           File[] files = f.listFiles(); 
           if(files != null) {  
        	   for(int i =0; i < files.length; i++){
        		   File file =files[i];
                   if(file.isDirectory()) {  
                       deleteAllFiles(file);  
                	   boolean b =  file.renameTo(new File("d:\\Bytter\\temp" + File.separator + no));
                	   if(!b){
                    	   System.out.println("目录" + file.getName() + "不能重命名!");
                    	   return;
                	   }
                	   no ++;
                   }  
                   else if(file.isFile()) {  
                	   boolean b = file.renameTo(new File("d:\\Bytter\\temp" + File.separator + no));
                	   if(!b){
                    	   System.out.println("文件" + file.getName() + "不能重命名!");
                    	   return;
                	   }
                	   no ++;
                   }  
        	   }
           }  
       }  
   }  
}



小知识共享下:文件删除失败后,可考虑重命名,解决路径过长问题。

file.delete()返回false,除了文件被占用还有什么原因呢?

你可能感兴趣的:(java)