En supposant que j'ai un File f
qui représente un répertoire, alors f.delete()
ne supprimera le répertoire que s'il est vide. J'ai trouvé un couple de examples en ligne qui utilisent File.listFiles()
ou File.list()
pour obtenir tous les fichiers dans le répertoire, puis traverse récursivement la structure du répertoire et supprime tous les fichiers. Cependant, comme il est possible de créer des structures de répertoires infiniment récursives (dans Windows et Linux (avec des liens symboliques)), il est possible que les programmes écrits dans ce style ne s'arrêtent jamais. Alors, y a-t-il une meilleure façon d'écrire un tel programme pour qu'il ne tombe pas dans ces pièges? Ai-je besoin de garder la trace de partout où j'ai traversé et de m'assurer de ne pas tourner en rond ou y a-t-il une meilleure façon de faire?Suppression de répertoires non vides en Java
Mise à jour: En réponse à certaines des réponses (merci les gars!) - Je préférerais que le code ne suive pas les liens symboliques et reste dans le répertoire qu'il était censé supprimer. Puis-je me fier à l'implémentation de Commons-IO pour ce faire, même dans le cas de Windows?
J'aurais pensé que cela ralentirait un peu la suppression récursive. Ne pourriez-vous pas faire un File.getPath(). Equals (File.getCanonicalPath())? –
Je ne suis pas sûr du nombre de répertoires récursifs que vous voulez traiter, mais Map.put() et Map.contains() par répertoire ne vous ralentiront pas. Le code que vous avez suggéré ne vous dirait que quelque part sur votre chemin sont des liens symboliques. Ils peuvent être au-dessus du répertoire que vous voulez supprimer. – Bombe
Honnêtement: vous inquiétez de faire le travail en premier.Seulement si cela fonctionne parfaitement et que vous pouvez mesurer que c'est trop lent (peu importe ce que cela signifie), seulement alors vous commencez à vous soucier des performances. L'optimisation prématurée est si bête que ça me fait mal. Physiquement. – Bombe