2012-11-29 6 views
1

Je ne peux pas supprimer un fichier en Java. Dans mon programme, je crée un fichier, je fais quelque chose avec, puis je dois le supprimer. Lorsque j'appelle myFile.delete(), il renvoie false. J'ai vérifié le chemin qu'il essaye de supprimer et c'est correct, j'ai également des privilèges d'administrateur (je travaille sur Windows 7). Voici mon morceau de code, très simple:Impossible de supprimer le fichier dans JAVA

File aux = new File(System.getProperty("user.dir")+"//tmp.ps"); 

CreatePostScript(aux.getAbsoluteFilePath()); 
SendToPrinter(); 

try{ 
    aux.delete(); 
} 
catch(SecurityException ex){ 
    ex.printStackTrace(); 
} 

Modifier, j'ai lu quelques propriétés de l'objet du fichier:

canRead() returns false 
canWrite() returns false 
exists() returns false 
getPath() returns the_actual_path_of_the_file 
isFile() returns false 
+1

quelle est l'exception que vous obtenez – developer

+0

Il ne fait pas exception, 'delete()' renvoie false. – looper

+0

possiblity duplicate http://stackoverflow.com/q/991489/668970 – developer

Répondre

1

Comme vous effectuez le traitement du dossier, il est probable qu'un OutputStream est toujours ouvert. Appelez out.close(); avant d'essayer de supprimer le fichier.

+0

Quel flux? Je crée juste le fichier et utilise son chemin pour exécuter une commande avec Runtime.getRuntime(). Exec – Joel

+0

Ok, le fichier existe-t-il avant que vous essayiez de le supprimer? – Reimeus

2

Faites-vous cela à l'intérieur de certains IDE? Probablement l'IDE tient le handle de fichier. Essayez de télécharger Unlocker et de voir qui tient le handle.

+0

J'utilise Netbeans – Joel

+0

+1 pour le lien vers le déverrouilleur. Merci! –

+0

Unlocker indique qu'aucun programme ne verrouille le fichier – Joel

1

Vérifiez que vous fournissez la propriété user.dir en argument de ligne de commande -D. Et utilisez File.pathSeparator au lieu de //

+0

Merci pour le conseil, mais je pense que ce n'est pas le problème, le chemin de fichier que la fonction getPath() renvoie est correct. – Joel

+1

Pourquoi ajouter '//' avant le nom du fichier? Dans Windows, le séparateur de fichier est '\\\'. – ice

0

dans votre code, je vois que vous ne fermez pas le flux avant de supprimer, fermer le flux et supprimer le fichier.

+0

Quel flux? Je crée juste le fichier et utilise son chemin pour exécuter une commande avec Runtime.getRuntime(). Exec – Joel

+0

vous appelez des méthodes après la création du fichier, que font ces méthodes, – developer

+0

La méthode CreatePostScript() appelle la fonction exec() en passant le chemin du fichier en tant qu'argument. La méthode elle-même ne fonctionne pas avec le fichier, j'utilise la classe File pour travailler avec les chemins de fichiers – Joel

1

Vous pouvez envisager d'utiliser le NIO2 API de Java 7 pour l'opération. Au lieu de renvoyer une valeur de succès, il throws an exception réellement lorsque quelque chose l'empêche d'effectuer une opération.

+1

J'ai utilisé Unlocker comme suggéré dans une autre réponse et le fichier n'est pas verrouillé. – Joel

+0

Merci, je n'ai pas remarqué celui-là. Retiré cette partie de la réponse. –

Questions connexes