A voir également:
- [Java] Suppression de fichiers
- Waptrick java football - Télécharger - Jeux vidéo
- Forcer suppression fichier - Guide
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Explorateur de fichiers - Guide
4 réponses
kuchi007
Messages postés
308
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
3 août 2009
31
19 juin 2009 à 10:08
19 juin 2009 à 10:08
Tu as essayé avec trois fichiers??
Mais on dirait bien que c'est lié au fait que tant que ton serveur ne se ferme pas il considère que ton fichier .xls est toujours utilisé dans les ressources du serveur.
Je ne sais pas si tu traites tes fichiers dans une boucle qui itère sur chaque fichier, si c'est le cas peut être bien que le dernier traité n'est pas fermé.
Mais on dirait bien que c'est lié au fait que tant que ton serveur ne se ferme pas il considère que ton fichier .xls est toujours utilisé dans les ressources du serveur.
Je ne sais pas si tu traites tes fichiers dans une boucle qui itère sur chaque fichier, si c'est le cas peut être bien que le dernier traité n'est pas fermé.
Merci biboo et kuchi007 pour la rapidité de vos réponses.
Alors tout d'abord sachez que tous les fichiers présents dans le répertoire temporaire sont supprimés avec succés (fichier Excel compris).
C'est uniquement le fichier XML créé par JDOM qui refuse de se supprimer dans le cas ou je traite test2.xls.
kuchi007, oui j'itère dans une boucle qui liste tous les fichiers présents dans mon répertoire temporaire :
public class DelRep
{
private File del = null; // pointe sur le répertoire temporaire de l'application (temp)
//private File[] children = null; // liste des fichiers dans temp
public DelRep (String path)
{
this.del = new File(path); // pointe sur le répertoire temporaire de l'application (temp)
}
public void deleteTempDir () throws IOException
{
recursifDelete(this.del); // suppression du répertoire temporaire
}
public void recursifDelete(File del) throws IOException
{
if (!del.exists()) throw new IOException // si le path ne pointe vers rien
("File not found '" + del.getAbsolutePath() + "'");
if (del.isDirectory()) // si le path pointe vers un répertoire
{
File[] children = del.listFiles(); // on liste les fichiers contenus dans le répertoire
for (int i=0; children != null && i<children.length; i++)
recursifDelete(children[i]);
if (!del.delete()) throw new IOException
("No delete path '" + del.getAbsolutePath() + "'");
}
else if (!del.delete()) throw new IOException
("No delete file '" + del.getAbsolutePath() + "'");
}
}
Parcontre j'aurais du faire plus de test unitaires avant de poster :s
Je me suis rendu compte que pour le fichier test2.xls la suppression foire à chaque fois, mais pour le fichier test.xls ça ne marche que la première fois.
Si je relance le programme (un lien qui me renvoi sur la premiere servlet) et que je re-traite le fichier test.xls, j'obtient la même erreur qu'avec test2.xls (cad que le programme ne peut pas supprimer le fichier test.xml produit par mon application)
Cela doit forcément venir de mon programme un peu confus (car je suis débutant en programmation), mais la je sèche :s
Alors tout d'abord sachez que tous les fichiers présents dans le répertoire temporaire sont supprimés avec succés (fichier Excel compris).
C'est uniquement le fichier XML créé par JDOM qui refuse de se supprimer dans le cas ou je traite test2.xls.
kuchi007, oui j'itère dans une boucle qui liste tous les fichiers présents dans mon répertoire temporaire :
public class DelRep
{
private File del = null; // pointe sur le répertoire temporaire de l'application (temp)
//private File[] children = null; // liste des fichiers dans temp
public DelRep (String path)
{
this.del = new File(path); // pointe sur le répertoire temporaire de l'application (temp)
}
public void deleteTempDir () throws IOException
{
recursifDelete(this.del); // suppression du répertoire temporaire
}
public void recursifDelete(File del) throws IOException
{
if (!del.exists()) throw new IOException // si le path ne pointe vers rien
("File not found '" + del.getAbsolutePath() + "'");
if (del.isDirectory()) // si le path pointe vers un répertoire
{
File[] children = del.listFiles(); // on liste les fichiers contenus dans le répertoire
for (int i=0; children != null && i<children.length; i++)
recursifDelete(children[i]);
if (!del.delete()) throw new IOException
("No delete path '" + del.getAbsolutePath() + "'");
}
else if (!del.delete()) throw new IOException
("No delete file '" + del.getAbsolutePath() + "'");
}
}
Parcontre j'aurais du faire plus de test unitaires avant de poster :s
Je me suis rendu compte que pour le fichier test2.xls la suppression foire à chaque fois, mais pour le fichier test.xls ça ne marche que la première fois.
Si je relance le programme (un lien qui me renvoi sur la premiere servlet) et que je re-traite le fichier test.xls, j'obtient la même erreur qu'avec test2.xls (cad que le programme ne peut pas supprimer le fichier test.xml produit par mon application)
Cela doit forcément venir de mon programme un peu confus (car je suis débutant en programmation), mais la je sèche :s
Autre petite précision,
Je ne parcours pas mes fichiers xml que je produits, donc ils le devraient pas être ouvert en lecture.
Le seul flux que j'utilise sur eux, c'est le flux de sortie, et je le ferme bien :
public void enregistre(String fichier) // enregistre le nouveau fichier XML document
{
try
{
FileOutputStream fout = new FileOutputStream(fichier);
XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
sortie.output(document, fout);
fout.close();
}
catch (java.io.IOException e){}
}
note : document est un objet de la classe JDOM :
private Element racine = new Element("Questions"); // création de l'élément racine
private org.jdom.Document document = new Document(racine); // création d'un nouvel objet JDOM
Je ne parcours pas mes fichiers xml que je produits, donc ils le devraient pas être ouvert en lecture.
Le seul flux que j'utilise sur eux, c'est le flux de sortie, et je le ferme bien :
public void enregistre(String fichier) // enregistre le nouveau fichier XML document
{
try
{
FileOutputStream fout = new FileOutputStream(fichier);
XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
sortie.output(document, fout);
fout.close();
}
catch (java.io.IOException e){}
}
note : document est un objet de la classe JDOM :
private Element racine = new Element("Questions"); // création de l'élément racine
private org.jdom.Document document = new Document(racine); // création d'un nouvel objet JDOM
C'est bon, j'ai finit par trouver une solution :D
Je pensais que le problème devait venir de l'objet XMLOutputter qui utilise un flux de sortie.
J'ai donc finit par faire appel au Garbage Collector avant de supprimer le répertoire, ainsi plus d'objets donc plus de flux lié aux objets.
Apparament ça fonctionne très bien, même en relançant l'application sans redémarrer tomcat.
Moi ça me va :)
Problème résolu!
Merci biboo et kuchi007 pour vos réponses :)
Je pensais que le problème devait venir de l'objet XMLOutputter qui utilise un flux de sortie.
J'ai donc finit par faire appel au Garbage Collector avant de supprimer le répertoire, ainsi plus d'objets donc plus de flux lié aux objets.
Apparament ça fonctionne très bien, même en relançant l'application sans redémarrer tomcat.
Moi ça me va :)
Problème résolu!
Merci biboo et kuchi007 pour vos réponses :)
kuchi007
Messages postés
308
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
3 août 2009
31
19 juin 2009 à 11:47
19 juin 2009 à 11:47
Effectivement les objets sont maintenus en mémoire si tu ne les déférences pas.