如何删除文件夹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.listFiles 的问题是它没有递归列出。
您可以使用FileUtils.listFiles,它对文件使用一个过滤器,对目录使用一个过滤器,并在dirFilter
中指定TrueFileFilter.INSTANCE
以匹配所有子目录。
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(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();
}
}
}
记得在您的目录前添加“/”
这是我的代码。但它只能删除当前文件夹中的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.listFiles 的问题是它没有递归列出。
您可以使用FileUtils.listFiles,它对文件使用一个过滤器,对目录使用一个过滤器,并在dirFilter
中指定TrueFileFilter.INSTANCE
以匹配所有子目录。
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(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();
}
}
}
记得在您的目录前添加“/”