繁体   English   中英

如何删除文件夹INCLUDE中的所有文件?

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

这是我的代码。 但是它只能删除当前文件夹中的txt文件,不能删除子文件夹。

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()不会删除不为空的目录。 您需要创建一个递归函数以从目录和子目录中删除文件。

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();
    }
}

尝试后,我发现此代码比递归方法更好:我们应该使用listFiles(文件目录,String []扩展名,布尔递归)

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();
           }
    }
 }

记住在目录之前添加“ /”

File.listFiles的问题在于它不会递归列出。

您可以使用FileUtils.listFiles它使用的文件一个过滤器和目录一个过滤器,并指定TrueFileFilter.INSTANCEdirFilter匹配所有子目录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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