web-dev-qa-db-fra.com

java file.delete () renvoie false mais file.exists () renvoie true

Lorsque j'essaie de supprimer un fichier du code Java présent dans le serveur Tomcat conf/Catalina/localhost, alors file.delete () renvoie toujours false. Mais si je vérifie le fichier par la fonction file.exists (), il retourne vrai. Je ne reçois aucune exception. S'il vous plaît aidez-nous pourquoi cela se produit. Quelle est la solution pour cela?

15
vishal

Lorsque j'essaie de supprimer un fichier présent sur le serveur Tomcat conf/Catalina/localhost à partir du code Java, puis file.delete () toujours renvoie faux. Mais si je vérifie le fichier par la fonction file.exists () ça retourne vrai.

Très probablement, vous n'avez pas permission pour supprimer des fichiers sur le serveur. Vérifiez vos autorisations.

f.delete() renvoie false, cela signifie qu'il n'a pas été/ne peut pas être supprimé et f.exists() renvoie true. Le fichier existe mais ne peut pas être supprimé.

15
Simon Dorociak

Il existe un certain nombre de raisons pour lesquelles un fichier ne peut pas être supprimé; il peut ne pas exister, il peut s'agir d'un répertoire non vide, vous n'avez peut-être pas fermé toutes les ressources qui l'utilisent et votre programme n'est peut-être pas autorisé à le faire, pour n'en nommer que quelques-unes.

Malheureusement, la méthode File.delete() fournit très peu d’informations sur les raisons; c'est à vous de chercher et de comprendre. Mais il y a de bonnes nouvelles. vous ne voulez pas utiliser File en premier lieu.

Java 7 a introduit le nouveau paquet Java.nio.file qui est une API d'accès aux fichiers beaucoup plus robuste. Il fournit le concept abstrait Path et sépare les opérations concrètes dans la classe Files , en particulier il fournit Files.delete() qui est documenté pour générer des exceptions claires décrivant les raisons pour lesquelles la suppression peut échouer.

Utilisez Path et Files; vous serez content de l'avoir fait.

11
dimo414

Vous devez fermer le flux avant de le supprimer.

par exemple - 

fileInputStream.close();
file.delete();
5
vsharma

Si le répertoire n'est pas vide, la méthode File.delete() renverra false sans générer d'erreur. 

Vous devez nettoyer le répertoire avant de le supprimer.

3
Akshay Shinde

Cela signifie que le fichier existe déjà, mais que votre processus Java n’a pas l’autorisation de le supprimer. C’est pourquoi la fonction delete renvoie false

Returns: true if and only if the file or directory is successfully deleted; false otherwise

0
Renjith