Лучший способ убедиться, что потоки, которые открыты внутри вызова метода, закрыты - PullRequest
0 голосов
/ 06 мая 2019

Я вызываю метод для записи некоторых данных в файл CSV в Java.Внутри этого метода я использую FileWriter, который генерирует IOException.Мне интересно, как правильно обрабатывать это исключение, если я хочу обработать его во внешнем методе, а также обеспечить закрытие FileWriter.

Я думаю о двух решениях:

  1. Просто обработайте исключение внутри метода, который открывает FileWriter.

  2. Найдите способ передать FileWriter обратно в вызывающий метод, чтобы он мог быть закрыт.

Вот пример того, о чем я говорю:

public static void outerFunc() {
    // get some sort of data
    try {
        innerFunc(data);
    }
    catch (IOException e) {
        e.printStackTrace();
    }
    finally {
        // can I close the FileWriter here somehow?
    }
}

private static void innerFunc(Data data) throws IOException {
    FileWriter csv = new FileWriter("result.csv")

    // Write the data to the file

    csv.flush();
    csv.close();
}

Дайте мне знать, что вы, ребята, думаете.Я очень открыт к тому факту, что я могу быть совершенно вне базы и должен поступить иначе.Заранее благодарю за любой вклад!

1 Ответ

2 голосов
/ 06 мая 2019

Метод, который открывает ресурс, должен его закрыть, и я бы использовал оператор try-with-resources .Мол,

try (FileWriter csv = new FileWriter("result.csv")) {
    // ...
}
...