3 votes

Que dois-je fermer lorsque j'utilise PrintWriter en Java ?

Lors de l'utilisation d'un PrintWriter comme ceci :

PrintWriter fileOut = new PrintWriter(new BufferedWriter(new FileWriter(csvFileIn)));

Que dois-je fermer dans le bloc final ? Le PrintWriter, le BufferedWriter et le FileWriter ?

Dois-je essayer de rattraper l'instruction de fermeture dans le bloc final ?

[EDIT] Je dois utiliser Java 6, donc je ne peux pas utiliser l'instruction try-with-resources.

3voto

Ajinkya Patil Points 619

Vous devez utiliser -

fileOut.close();

Comme aucun nom de variable n'est attribué à BufferedWriter o FileWriter également le fileOut est fabriqué à partir d'eux lorsque vous fermez fileOut il fermera à son tour les deux flux.

3voto

SCouto Points 3557

Vous pouvez utiliser un Essayer avec des ressources bloc

try (PrintWriter fileOut = new PrintWriter(new BufferedWriter(new     FileWriter(csvFileIn)))) {
    //WHATEVER you need to do
}

Desde PrintWriter met en œuvre AutoCloseable il se fermera de lui-même une fois que le essayer est terminé (même si une exception est levée)

Plus d'informations à ce sujet aquí

0voto

Roland Illig Points 15357

En toute rigueur, vous devriez fermer les trois flux. Et j'ajouterais même une quatrième couche, puisque vous ne voulez probablement pas écrire le fichier CSV à l'aide de la commande encodage par défaut du système mais un modèle spécifié par le client. Voici donc ce qu'il en est :

try (FileOutputStream fos = new FileOutputStream(csvFileIn);
     FileWriter fwr = new FileWriter(fos, StandardEncodings.UTF_8);
     BufferedWriter bwr = new BufferedWriter(fwr);
     PrintWriter pwr = new PrintWriter(bwr)) {
  pwr.println("Field1;Field2;Field3");
  pwr.println("Data1;Data2;Data3");
}

En pratique, seul le flux le plus extérieur est fermé, car il transmet (généralement) le flux close() à son flux enveloppé, et en obtenant un OutOfMemoryError entre l'ouverture du fichier et l'atteinte du try est très peu probable. Dans ce cas, la situation se présente comme suit :

try (PrintWriter pwr = new PrintWriter(new BufferedWriter(new FileWriter(new FileOutputStream(csvFileIn), StandardEncodings.UTF_8)))) {
  pwr.println("Field1;Field2;Field3");
  pwr.println("Data1;Data2;Data3");
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X