简体   繁体   中英

How to delete all the files in the folder INCLUDE the sub-folder?

This is my code. But it only be able to delete the txt file in the current folder, not sub-folder.

import java2.org.apache.commons.io.filefilter.WildcardFileFilter;
    import java.io.*;
    public class DeleteSameType{
    public static void main(String []args){

        File dir = new File("user/document/test");
        FileFilter fileFilter = new WildcardFileFilter("*.txt");
        File[] files = dir.listFiles(fileFilter); 
        for(File f: files){
            f.delete();
        }

    }
}

在此处输入图片说明

File.delete() does not delete directories which are not empty. You need to create a recursive function to delete files from directory and subdirectories.

import java2.org.apache.commons.io.filefilter.WildcardFileFilter;
    import java.io.*;
    public class DeleteSameType{
    public static void main(String []args){

    DeleteSameType deleteSameType = new DeleteSameType();

        File dir = new File("user/document/test");

    deleteSameType.recursiveDelete(dir)        

    }

    private void recursiveDelete( File dir) {

    FileFilter fileFilter = new WildcardFileFilter("*.txt");
    if(dir.isDirectory()) {
        File[] files = dir.listFiles(fileFilter);
          for(File f: files){
                recursiveDelete(f);
        } 

        }
    dir.delete();
    }
}

After trying I find this code is better than the recursive method: We should use listFiles(File directory, String[] extensions, boolean recursive)

package deletefile;

import java.io.File;
import java.util.Collection;
import org.apache.commons.io.FileUtils;


public class DeleteFile {
    public static void main(String []args){  
        File dir = new File("/Users/Documents/test");
            String [] str = {"docx"};
           Collection<File> files = FileUtils.listFiles(dir,str,true);   
           for(File f:files){
               f.delete();
           }
    }
 }

remember to add "/" before your Directory

The problem with File.listFiles is that it does not list recursively.

You can use FileUtils.listFiles which uses one filter for files and one filter for the directories, and specify TrueFileFilter.INSTANCE in dirFilter to match all subdirectories.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM