Eclipse schlägt vor, dass hier ein Ressourcen-Leck ist, ich bin unsicher, weil das Schreiben des Ausgabestroms geschlossen wird.Muss ich sicher Ressourcen-Closing von Dingen handhaben, die an OutputStreamWriter delegieren
try (OutputStreamWriter fileWriter = new OutputStreamWriter(new FileOutputStream(file), encoder))
{
fileWriter.append('\uFEFF'); // byte order mark
CSVWriter csvWriter = new CSVWriter(fileWriter); // au.com.bytecode.opencsv.CSVWriter
csvWriter.writeNext(headers);
streamSupplier.forEachOrdered(row -> {
if (row.length != headers.length)
{
String exception
= String.format("row length %d should not be different from header length %d",
row.length,
headers.length);
throw new IllegalStateException(exception);
}
csvWriter.writeNext(row);
processedHandler.accept(processed.nextInt());
});
csvWriter.flush();
csvWriter.close();
return file;
}
catch (IOException e)
{
logError(e);
throw new RuntimeException(e);
}
Gibt es hier ein Ressourcenleck? ist FileOutputStream
erfolgreich geschlossen? Ist es wichtig, ob CSVWriter
nicht seit OutputStreamWriter
wird? Was ist richtiger Weg, dies zu tun?
kann eigentlich nicht, denn ' CsvWriter 'hat nicht' append' zum Hinzufügen der 'BOM', technischen Details ... – xenoterracide
@xenoterracide Sie können beide Ressourcen in den Versuch mit Ressourcen setzen. –