2014-01-24 126 views
3

这里是我试过代码:如何删除包含Java中其他文件夹的文件夹?

import java.io.*; 
public class file03 { 
    public static void main(String[] args) { 
     File f1 = new File("C:/tempo1/tempo"); 
     f1.mkdirs(); 
     File f2 = new File("C:/test"); 
     if(!f2.exists()) { 
      f2.mkdir(); 
     } 
     f1 = new File("C:/tempo1/kempo"); 
     f1.mkdirs(); 
     f1 = new File("C:/tempo1"); 
     String[] t = {}; 
     if(f1.exists()) { 
      t = f1.list(); 
      System.out.println(t.length + " files found"); 
     } 
     for(int i = 0; i < t.length; i++) { 
      System.out.println(t[i]); 
     } 
     try { 
      Thread.sleep(3000); 
     } 
     catch(Exception e) {} 
     f2.delete(); 
     f2 = new File("C:/tempo1/test.txt"); 
     try { 
      f2.createNewFile(); 
     } 
     catch(Exception e) {} 
     try { 
      Thread.sleep(7000); 
     } 
     catch(Exception e) {} 
     File f3 = new File("C:/tempo1/renametesting.txt"); 
     f2.renameTo(f3); 
     try { 
      Thread.sleep(5000); 
     } 
     catch(Exception e) {} 
     f3 = new File("C:/tempo1"); 
     f3.delete(); 
    } 
} 

我注意到的是,虽然该文件夹的测试被删除,文件夹tempo1没有被删除。是否因为它包含其他文件夹和文件?如果是这样,我该如何删除它? 我正在使用BlueJ IDE。

+2

我认为你必须这样做递归 – BackSlash

+1

你将不得不递归地删除文件和目录。 – Rahul

+0

但是没有其他方法可以直接删除它吗?删除递归声音相当费力。 – user3177527

回答

2

要删除具有文件的文件夹,不需要循环或递归搜索。您可以直接使用:

FileUtils.deleteDirectory(<File object of directory>); 

此功能将删除该文件夹中的所有文件在它

+0

非常感谢。这似乎或多或少是我想要的。这是一个内置函数吗? – user3177527

+0

我试过了:FileUtils.deleteDirectory(f3);它说找不到符号FileUtils。 – user3177527

+0

是的,它是Apache commons的一部分:org.apache.commons.io.FileUtils –

5

直到该文件夹​​的所有文件都被删除后才能删除文件夹。

首先从该文件夹中删除所有文件,然后删除该文件夹

这是删除文件夹代码..

您需要文件夹只有

public static void delete(File file) 
      throws IOException { 

     if (file.isDirectory()) { 

      //directory is empty, then delete it 
      if (file.list().length == 0) { 

       file.delete(); 
//    System.out.println("Directory is deleted : "+ file.getAbsolutePath()); 

      } else { 

       //list all the directory contents 
       String files[] = file.list(); 

       for (String temp : files) { 
        //construct the file structure 
        File fileDelete = new File(file, temp); 

        //recursive delete 
        delete(fileDelete); 
       } 

       //check the directory again, if empty then delete it 
       if (file.list().length == 0) { 
        file.delete(); 
//     System.out.println("Directory is deleted : " + file.getAbsolutePath()); 
       } 
      } 

     } else { 
      //if file, then delete it 
      file.delete(); 
//   System.out.println("File is deleted : " + file.getAbsolutePath()); 
     } 
    } 
路径
+0

非常感谢。但是有没有更小或更简单的? – user3177527

+0

@ user3177527它更小。删除评论 –

+0

我想要的东西像一行或两行代码。:P – user3177527

4
public class DeleteFolder { 
/** 
* Delete a folder and all content folder & files. 
* @param folder 
*/ 
    public void rmdir(final File folder) {  
     if (folder.isDirectory()) {   //Check if folder file is a real folder 
      File[] list = folder.listFiles(); //Storing all file name within array 
      if (list != null) {    //Checking list value is null or not to check folder containts atlest one file 
       for (int i = 0; i < list.length; i++) {  
        File tmpF = list[i]; 
        if (tmpF.isDirectory()) { //if folder found within folder remove that folder using recursive method 
         rmdir(tmpF); 
        } 
        tmpF.delete();    //else delete file 
       } 
      } 
      if (!folder.delete()) {   //if not able to delete folder print message 
      System.out.println("can't delete folder : " + folder); 
      } 
     } 
    } 
} 
+0

完全是我会这样做的! – omgBob

+3

-1。 “只是代码”的答案对我来说并不好。因为你展示了如何去做,但是你没有解释你在做什么,所以OP从这个答案中什么也没有学到,他只是复制你的代码,这不是这个网站的目的。 – BackSlash

+0

任何Java编码器都可以理解这一小段代码。现在我为您添加了评论。 – anupammaiti

相关问题