Supprimer tous les fichiers du répertoire (mais pas le répertoire) – une solution de ligne

Je veux supprimer tous les fichiers du répertoire ABC.

Lorsque j’ai essayé avec FileUtils.deleteDirectory(new File("C:/test/ABC/")); il supprime également le dossier ABC.

Existe-t-il une solution unique permettant de supprimer des fichiers dans un répertoire mais pas dans un répertoire?

 FileUtils.cleanDirectory(directory); 

Cette méthode est disponible dans le même fichier. Cela supprime également tous les sous-dossiers et fichiers sous eux.

Documents: org.apache.commons.io.FileUtils.cleanDirectory

Voulez-vous dire comme?

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

Cela supprimera uniquement les fichiers, pas les répertoires.

La réponse de Peter Lawrey est géniale car elle est simple et ne dépend pas de quelque chose de spécial. Si vous avez besoin de quelque chose qui supprime également les sous-répertoires et leur contenu, utilisez la récursivité:

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

Pour épargner les sous-répertoires et leur contenu (partie de votre question), modifiez comme suit:

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

Ou, puisque vous vouliez une solution à une ligne:

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

Utiliser une bibliothèque externe pour une tâche aussi sortingviale n’est pas une bonne idée, à moins que vous ayez besoin de cette bibliothèque pour autre chose, auquel cas il est préférable d’utiliser le code existant. Vous semblez utiliser la bibliothèque Apache de toute façon, utilisez sa méthode FileUtils.cleanDirectory() .

Java 8 Stream

Cela supprime uniquement les fichiers de ABC (les sous-répertoires sont intacts):

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

Cela supprime uniquement les fichiers de ABC (et sous-répertoires):

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

^ Cette version nécessite la gestion de l’IOException

Ou pour l’utiliser dans Java 8:

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

C’est dommage que la gestion des exceptions soit si volumineuse, sinon ce serait un one-liner …

 public class DeleteFile { public static void main(Ssortingng[] args) { Ssortingng 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"); } } }} 

Pour supprimer tous les fichiers du répertoire, dites “C: \ Example”

 File file = new File("C:\\Example"); Ssortingng[] 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(Ssortingng[] args) { Ssortingng 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); } } } } } 

Si vous souhaitez supprimer tous les fichiers, supprimez

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

déclaration cela fonctionnera.

Une autre solution Java 8 Stream pour supprimer tout le contenu d’un dossier, les sous-répertoires inclus, mais pas le dossier lui-même.

Usage:

 Path folder = Paths.get("/tmp/folder"); CleanFolder.clean(folder); 

et le code:

 public interface CleanFolder { static void clean(Path folder) throws IOException { Function> walk = p -> { try { return Files.walk(p); } catch (IOException e) { return Stream.empty(); }}; Consumer delete = p -> { try { Files.delete(p); } catch (IOException e) { } }; Files.list(folder) .flatMap(walk) .sorted(Comparator.reverseOrder()) .forEach(delete); } } 

Le problème avec chaque solution de stream impliquant Files.walk ou Files.delete est que ces méthodes lancent une exception IOException qui est difficile à gérer dans les stream.

J’ai essayé de créer une solution plus concise que possible.