Java.io.Exception

vquiblier Messages postés 14 Date d'inscription mercredi 22 juillet 2009 Statut Membre Dernière intervention 2 avril 2010 - 25 févr. 2010 à 14:54
 Utilisateur anonyme - 25 févr. 2010 à 15:46
Bonjour,

Je galère pour régler un bug dans mon code Java.
En effet mon code est censer écrire dans un fichier une matrice calculée grâce à différentes méthodes implémenter que j'ai implémenté.

Voilà mon main:
public static void main(String[] args) {
if (args.length == 0 || args.length > 4) {
System.out.println(args.length
+ " n'est pas le bon nombre d'arguments:");
System.out.println(message);
} else if (args[0].equals("-help")) {
System.out.println(message);
} else {
for (int i = 0; i < args.length; i++) {
if (args[i].equals("-sift")) {
sift = new File(args[i + 1]);
if (!sift.exists()) {
System.out
.println("ERREUR: le fichier de SIFT n'existe pas.");
}
}
if (args[i].equals("-res")) {
res = new File(args[i + 1]);
if (res.exists()) {
res.delete();
}
try {
res.createNewFile();
} catch (IOException e) {
System.out.println("Probleme d'entree sortie");
e.printStackTrace();
}
}
}
}

files = new ArrayList<File>();
listFiles(sift.getAbsolutePath());
filtrage(".des");
for (int i = 0; i < files.size(); i++) {
/*
System.out.println("l'element " + i + " de la liste est "
+ files.get(i).getName());
*/
}
Matrix current;
int i, j, d;
BufferedWriter output;
FileWriter fw = null;
try {
fw = new FileWriter(res.getAbsolutePath(), true);
output = new BufferedWriter(fw);
output.write("VecMatSym " + files.size());
output.flush();
output.close();

} catch (IOException e1) {
System.out.println("ERREUR: le FileWriter n'a pas pu être créé");
e1.printStackTrace();
}
for (i = 0; i < files.size(); i++) {
current = new Matrix(files.get(i));
for (j = 0; j <= i; j++) {
System.out.println("Comparaison entre sift "+files.get(i)+" et le sift "+files.get(j));
d = current.getSiftsDistance(new Matrix(files.get(j)));
try {
output = new BufferedWriter(fw);
output.write(String.valueOf(d));
output.flush();
output.close();

} catch (IOException e) {
e.printStackTrace();
}

}
}

}



Voilà à la dernière itération de ma boucle for je reçois un message d'erreur:
java.io.IOException: Stream closed
Je sais que cette erreur peut se produire si j'essaye de lire dans un buffer fermé mais en regardant mon code je ne comprends pas.

Si quelqu'un trouve ce qui cloche dans mon code, il aura toute ma gratitude.

Merci.

3 réponses

vquiblier Messages postés 14 Date d'inscription mercredi 22 juillet 2009 Statut Membre Dernière intervention 2 avril 2010
25 févr. 2010 à 15:26
Re,

bon bah je crois que j'ai trouvé la solution il fallait recréer un nouveau FileWriter devant les nouveau BufferedWriter.

Par contre j'ai tenté çà en désespoir de cause, et je ne comprends pas pourquoi.

Si quelqu'un aurait une explication rationnelle je serais ravi de connaitre les raisons de mon erreurs.

Merci d'avance.
0
Utilisateur anonyme
25 févr. 2010 à 15:41
Salut,

       try
         {
            fw = new FileWriter(res.getAbsolutePath(), true);
            output = new BufferedWriter(fw);
            output.write("VecMatSym " + files.size());
            output.flush();
            output.close(); // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
         }
             catch (IOException e1)
            {
               System.out.println("ERREUR: le FileWriter n'a pas pu être créé");
               e1.printStackTrace();
            }


Il faudrait déplacer output.close(); Non ?

Cordialement,

...\ Dan /...
0
Utilisateur anonyme
25 févr. 2010 à 15:46
Re,

Ou plus exactement dans le catch faire en sorte de ne pas passer par la boucle...

Cordialement,


...\ Dan /...
0