Comment faire pour supprimer des fichiers d'un répertoire, mais pas les dossiers
J'ai créer un code qui supprime tous les fichiers dans un dossier, la question est alors que ce qui est grand, je veux être capable de supprimer tous les fichiers dans un répertoire, mais laisser les dossiers intacts, alors je n'ai pas à aller dans chaque dossier et supprimer les fichiers qu'il contient, c'est mon code actuel :
@ViewScoped
@ManagedBean
public class Delete {
public void DeleteFiles() throws IOException {
System.out.println("Called deleteFiles");
File file = new File("D:/Documents/NetBeansProjects/printing~subversion/fileupload/web/resources/pdf/up617648/");
String[] myFiles;
if (file.isDirectory()) {
myFiles = file.list();
for (int i = 0; i < myFiles.length; i++) {
File myFile = new File(file, myFiles[i]);
System.out.println(myFile);
myFile.delete();
}
DeleteFiles2();
}
}
public void DeleteFiles2() throws IOException {
System.out.println("Called deleteFiles2");
File file = new File("D:/Documents/NetBeansProjects/printing~subversion/fileupload/Uploaded/up617648/");
String[] myFiles;
if (file.isDirectory()) {
myFiles = file.list();
for (int i = 0; i < myFiles.length; i++) {
File myFile = new File(file, myFiles[i]);
System.out.println(myFile);
myFile.delete();
}
}
}
}
Comment pourrais-je modifier mon code pour atteindre cet objectif?
EDIT :
J'ai changé mon code :
@ViewScoped
@ManagedBean
public class Delete {
public void DeleteFiles() throws IOException {
System.out.println("Called deleteFiles");
File file = new File("D:/Documents/NetBeansProjects/printing~subversion/fileupload/web/resources/pdf/");
String[] myFiles;
if (file.isDirectory()) {
myFiles = file.list();
for (int i = 0; i < myFiles.length; i++) {
File myFile = new File(file, myFiles[i]);
System.out.println(myFile);
if (!myFile.isDirectory()) {
myFile.delete();
}
}
DeleteFiles2();
}
}
Et même si cela n'appelle tous les dossiers, c'est ma console:
INFO: Called deleteFiles
INFO: D:\Documents\NetBeansProjects\printing~subversion\fileupload\web\resources\pdf\cam01342
INFO: D:\Documents\NetBeansProjects\printing~subversion\fileupload\web\resources\pdf\geg00061
INFO: D:\Documents\NetBeansProjects\printing~subversion\fileupload\web\resources\pdf\null
INFO: D:\Documents\NetBeansProjects\printing~subversion\fileupload\web\resources\pdf\up617648
INFO: D:\Documents\NetBeansProjects\printing~subversion\fileupload\web\resources\pdf\up626088
INFO: Called deleteFiles2
Tt ne supprime pas les fichiers à l'intérieur de ces dossiers, comment puis-je faire cela?
EDIT 3: Utilisation de la récursivité, je suis maintenant une erreur de dépassement de pile.
Voici mon code :
public void DeleteFiles() {
File file = new File("D:/Documents/NetBeansProjects/printing~subversion/fileupload/web/resources/pdf/");
System.out.println("Called deleteFiles");
if (file.isDirectory()) {
for (File f : file.listFiles()) {
DeleteFiles();
}
} else {
file.delete();
}
}
- Pourquoi ne pouvez-vous pas utiliser de Fichier.isDirectory()?
- voulez-vous supprimer le fichier de manière récursive ou seulement les fichiers dans le dossier donné, en laissant les fichiers dans les sous-dossiers
- je veux être en mesure de supprimer tous les fichiers à l'intérieur d'une structure de répertoire, mais laissez les dossiers intacts, ajout d'une édition
Vous devez vous connecter pour publier un commentaire.
Pourquoi ne pas
au lieu de
?
il suffit juste d'utiliser
File.isDirectory()
.juste vérifier si c'est un fichier ou d'un répertoire. si c'est le fichier puis de le supprimer sinon laisser
dans votre cas
En utilisant la récursivité c'est très soignée 😉
deleteFiles (new File("C:\\Temp\\"));
et supprimé 1500 fichiers et 32 dossiers sans aucun problèmedeleteFiles(file);
) - ce qui conduit généralement à un débordement de tasJe pense que cela va faire
Alors vous devez faire appel
deleteFiles(new File("D:/Documents/NetBeansProjects/printing~subversion/fileupload/web/resources/pdf/"))
;La récursivité, c'est du matraquage, comme en témoigne le fait qu'une question de suivi a été nécessaire. Voir ma réponse il y a un moyen beaucoup plus simple:
Récursive suppression causant un débordement de la pile d'erreur
vous pouvez utiliser la méthode ci-dessous.