2014-01-24 176 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

相關問題