En regardant la classe java File, j'ai remarqué qu'il n'y avait pas de méthode prévue pour détruire un dossier qui n'est pas vide. En voici une. Méfiez-vous, ça marche vraiment. Je n'ai mis aucune procédure de contrôle ou de confirmation parce que si vous en êtes là c'est que vous savez ce que vous faites. Si vous l'utilisez mal et détruisez tous vos fichiers importants, ne venez pas vous plaindre que vous n'avez pas été avertis.
La classe Main() crée un dossier à l'endroit que vous spécifierez. Ce dossier appelé lala va contenir un fichier pouet.pouet et un dossier tralala. Ce dossier tralala contiendra un fichier pouet.pouet et un dossier tralala. Ce dernier dossier tralala contiendra un ficher nommé icone.jpg.
La boucle for() de Main() n'est pas de la récursivité mais montre bien l'idée de la récursivité.
Avant la boucle for() on initialise f à dossier.
Puis à chaque passage on crée d'abord les pouet.pouet ce qui fait que f devient lala/pouet.pouet si i = 0 puis lala/tralala/pouet.pouet pour i = 1.
f.getParent() donnera lala puis lala/tralala suivant les valeurs de i.
f = new File(f.getParent() + "/tralala") ; donne les valeurs lala/tralala (fin boucle i = 0) puis lala/tralala/tralala en fin de boucle i = 1.
Donc en début de boucle i = 1 donc on crée les pouet.pouet et les tralala de la boucle i = 1 dans lala/tralala. Le dossier lala/tralala/tralala est vide en sortie de for().
En sortie de la boucle for() f = lala/tralala/tralala et il n'y a qu'a lui faire créer icone.jpg.
Et on dit que je suis bizarre ?...
Vous n'avez rien vu. Parce que ce n'est pas de la récursivité encore.
Dans la classe DetruireUnDossierComplet, il y a un exemple de vraie récursivité. Je ne le détaille pas parce que si le principe est simple suivre les variables est vraiment bizarre et donnera le vertige au lecteur innocent.
Le principe est simple, on ouvre le dossier à détruire, on examine ce qu'il y a dedans. Les fichiers ? On peut les détruire. Les dossiers vides ? Détruisons-les ! Si c'est un dossier plein ? On recommence la procédure. C'est ça la récursivité. Si vous avez envie de vous amuser, suivez les valeurs des variables pour la destruction du lala créé précédemment. Effet garanti, mieux que la moquette.
Après avoir créé puis détruit le dossier lala évidemment vous n'avez plus trace de rien. Pour vérifier que la création fonctionne il suffit de commenter l'appel à DetruireUnDossierComplet(dossier) ;
Pour vérifier que la destruction fonctionne il faut décommenter l'appel à DetruireUnDossierComplet(dossier) ; et de renvoyer l'application. Si votre lala a disparu, c'est bien qu'il a été détruit.
Cette application a été faite avec NetBeans 7.1.2 et fonctionne sous ubuntu 10.04. Pour Windows, il faut peut-être changer le « / » autre chose fileSperatorCharacter (voire classe File).