2010-07-26 6 views
4

Mon code Java est incapable de supprimer des fichiers sur le disque dur du système. Lorsque la fonction file.delete() est appelée, elle renvoie false. Des idées, pourquoi cela pourrait-il se produire?Java Code impossible de supprimer le fichier

+0

Quel utilisateur est java en cours d'exécution? Cet utilisateur a-t-il eu besoin de droits pour supprimer le fichier? Exécutez-vous une application ou une applet? – andcoz

Répondre

5

File.delete() pouvez retourner false si vous essayez de supprimer un répertoire qui n'est pas vide, ou le fichier nommé n'existe tout simplement pas au moment de l'appel.

(s'il y a un problème d'autorisation, une SecurityException est lancée)

1

Les raisons habituelles sont des autorisations suffisantes (même si normalement que jetterait une exception), en essayant de supprimer un fichier non-existant ou d'essayer de supprimer un répertoire non vide. Etes-vous totalement sûr que vous avez les autorisations pour supprimer le fichier que vous essayez de supprimer?

1

Certains processus peuvent lire/écrire le fichier, de sorte qu'il est verrouillé. Ou alors votre processus n'a pas les permissions pour supprimer le fichier. Si le fichier est un répertoire, tous les fichiers qu'il contient doivent être supprimés avant que le répertoire ne puisse être supprimé. Et enfin il y a la situation que le fichier n'existe pas, donc la méthode delete retournera false.

1

Windows? Utilisez le Process Explorer pour rechercher tous les processus qui conservent un descripteur (verrou) sur le fichier (ou s'il s'agit d'un répertoire sur n'importe quel fichier à l'intérieur). Pour Linux, utilisez fuser.

+1

Les fichiers ouverts sur Linux n'empêcheront pas le fichier d'être dissocié. – sarnold

+0

Vous pouvez également verrouiller des fichiers sous Linux, mais cela est rarement utilisé. En outre, les montages NFS peuvent empêcher la suppression de fichiers. –

12

File.delete() peut ne pas supprimer un fichier pour de nombreuses raisons, notamment:

  • vous ne disposez pas des autorisations correctes pour supprimer le fichier
  • le fichier représente un répertoire et le répertoire est pas vide
  • le fichier est verrouillé par un autre processus, (ou même par le même processus en dire un non fermé FileOutputStream)
  • le fichier n'existe pas
+1

+1 N'a pas rencontré de FOS non fermé, cependant :-) –

+1

@Araon Digulla: un fichier non fermé ne pose problème que sur certains systèmes d'exploitation, tels que Windows. Sur les systèmes avec la sémantique du système de fichiers Posix, un fichier peut toujours être dissocié même s'il est ouvert par quelque chose d'autre. –

+1

Un couple plus de possibilités sont 1) que le fichier est sur un périphérique qui a été monté en lecture seule, ou 2) vous avez eu la malchance de frapper une erreur d'E/S disque. (Ni sont le cas ici, mais par souci d'exhaustivité ...) –

0

Vous essayez peut-être de supprimer un fichier existant dans C: Drive et vous ne disposez peut-être pas des autorisations nécessaires pour le faire. Essayez de le mettre dans un autre lecteur que C: puis exécutez votre code. J'espère que ça marche pour toi. :)

2

J'ai eu le même problème dans mon code et trouvé que le coupable était en fait un FileInputStream non fermé. Après avoir fermé ce FIS mon fichier supprimé sans aucun problème. J'espère que ça aidera quelqu'un.

Questions connexes