删除目录(但不是目录)中的所有文件 – 一个class轮解决scheme

我想删除ABC目录中的所有文件。

当我尝试FileUtils.deleteDirectory(new File("C:/test/ABC/")); 它也删除文件夹ABC。

有没有一个单线解决scheme,我可以删除目录内的文件,但不是目录?

 FileUtils.cleanDirectory(directory); 

在同一个文件中有这个方法。 这也将recursion删除它们下面的所有子文件夹和文件。

文档: org.apache.commons.io.FileUtils.cleanDirectory

你的意思是?

 for(File file: dir.listFiles()) if (!file.isDirectory()) file.delete(); 

这只会删除文件,而不是目录。

彼得·劳瑞的答案很好,因为它很简单,不依赖于任何特殊的东西,而是你应该这样做的方式。 如果您需要删除子目录及其内容,请使用recursion:

 void purgeDirectory(File dir) { for (File file: dir.listFiles()) { if (file.isDirectory()) purgeDirectory(file); file.delete(); } } 

要删除子目录及其内容(问题的一部分),请修改如下:

 void purgeDirectoryButKeepSubDirectories(File dir) { for (File file: dir.listFiles()) { if (!file.isDirectory()) file.delete(); } } 

或者,因为您想要一个单线解决scheme:

  for (File file: dir.listFiles()) if (!file.isDirectory()) file.delete(); 

使用外部库来处理这样一个简单的任务不是一个好主意,除非你还需要这个库来处理别的东西,在这种情况下,最好使用现有的代码。 你似乎正在使用Apache库,所以使用它的FileUtils.cleanDirectory()方法。

Java 8stream

这只会删除ABC中的文件(子目录不变):

 Arrays.stream(new File("C:/test/ABC/").listFiles()).forEach(File::delete); 

这只会删除ABC (和子目录)中的文件:

 Files.walk(Paths.get("C:/test/ABC/")) .filter(Files::isRegularFile) .map(Path::toFile) .forEach(File::delete); 

^这个版本需要处理IOException

或者在Java 8中使用它:

 try { Files.newDirectoryStream( directory ).forEach( file -> { try { Files.delete( file ); } catch ( IOException e ) { throw new UncheckedIOException(e); } } ); } catch ( IOException e ) { e.printStackTrace(); } 

可惜的是,exception处理是如此庞大,否则将是一个单线…

 public class DeleteFile { public static void main(String[] args) { String path="D:\test"; File file = new File(path); File[] files = file.listFiles(); for (File f:files) {if (f.isFile() && f.exists) { f.delete(); system.out.println("successfully deleted"); }else{ system.out.println("cant delete a file due to open or error"); } } }} 

从目录删除所有文件说“C:\示例”

 File file = new File("C:\\Example"); String[] myFiles; if(file.isDirectory()){ myFiles = file.list(); for (int i=0; i<myFiles.length; i++) { File myFile = new File(file, myFiles[i]); myFile.delete(); } } 
 package com; import java.io.File; public class Delete { public static void main(String[] args) { String files; File file = new File("D:\\del\\yc\\gh"); File[] listOfFiles = file.listFiles(); for (int i = 0; i < listOfFiles.length; i++) { if (listOfFiles[i].isFile()) { files = listOfFiles[i].getName(); System.out.println(files); if(!files.equalsIgnoreCase("Scan.pdf")) { boolean issuccess=new File(listOfFiles[i].toString()).delete(); System.err.println("Deletion Success "+issuccess); } } } } } 

如果你想删除所有文件删除

 if(!files.equalsIgnoreCase("Scan.pdf")) 

声明它将工作。

Interesting Posts