2010-01-10 2 views
1

Je travaille dans une application utilisant Tomcat et des servlets.Comment supprimer un fichier txt lors de l'utilisation de Tomcat et de servlets?

Il existe une servlet (audioProcess) qui reçoit le nom d'un fichier mp3 qui est lu. Cette servlet traite également le fichier mp3 et stocke le résultat dans un fichier txt. Le contenu de ce txt sera remplacé lorsque le servlet audioProcess sera à nouveau invoqué (avec un fichier mp3 différent).

Chaque fois que cette servlet est invoquée, je supprime le txt et j'en crée un nouveau (contenant des informations concernant le fichier mp3). Le nom du fichier txt est toujours le même.

Mon problème est que le fichier txt n'est jamais supprimé. Ce que je fais pour supprimer le fichier est:

File a = new File(path_clasificacion); 

if(a.exists()) 
{ 
    boolean erased = a.delete(); 
    out.println("erased?" + erased); 
} 

La première fois que j'invoque le servlet le fichier txt est effacé. Seulement la première fois. Après avoir supprimé le fichier txt, j'essaie d'écrire les nouvelles informations dans un fichier txt portant le même nom (stocké dans le même chemin). Ce qui se passe, c'est que l'ancien fichier n'est pas effacé, les nouvelles informations sont ajoutées au fichier. Pourquoi ne puis-je pas supprimer le fichier?

Merci

Le fichier txt est généré en utilisant ce code:

FileWriter f = null; 
PrintWriter pw = null; 

try 
{ 
f = new FileWriter(path,true); 
pw = new PrintWriter(f); 
pw.println(info);    
} catch (Exception e) {e.printStackTrace(); 

finally 
{ 
f.close(); 
} 

Répondre

4

Vous ne pouvez pas effacer le fichier tant que vous avez un fichier ouvert à lui.

Regardez à travers votre code et assurez-vous de close() des flux ou des lecteurs. Cela inclut évidemment s'assurer que toutes les références à partir du code de la bibliothèque de digestion MP3 sont également fermées.

"Que diriez-vous de la première fois?" vous demanderez. Réponse: L'appel erase() vous a donné un résultat positif car la demande de suppression a été transmise au système d'exploitation. Cependant, l'OS est toujours en train de tourner les pouces en attendant que vous lâchiez enfin le fichier. Ainsi, le fichier n'a pas été supprimé (physiquement) même la première fois.

+0

J'ai ajouté à ma description initiale la façon dont le fichier txt est généré. Je pense que la première fois que le fichier est vraiment supprimé, le problème est que immédiatement j'essaie de le créer à nouveau avec de nouvelles informations et je ne le ferme pas correctement. – dedalo

+0

OK, je comprends. Peut-être que vous devriez fermer 'pw' et pas' f'. Ou si vous voulez être très sûr, les deux, dans cet ordre. –

+0

J'ai examiné toutes les méthodes utilisées et j'ai trouvé que je n'avais pas fermé un FileReader. Maintenant qu'il est corrigé, cela fonctionne correctement. Merci pour votre conseil. – dedalo

Questions connexes