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");
}