Java FileReader попробуй поймать размещение

Я новичок в Java и только обхожу голову вокруг FileReader/FileWriter, но наткнулся на то, что я не понял, так что если кто-то может объяснить, почему эта первая попытка / улов не работает, а вторая попытка / улов работает?

Не работает

try{
    FileWriter filewriter = new FileWriter(filepath);
    filewriter.write(json.toString());
    saved = true;
} catch (IOException ex) {
    Logger.getLogger(PresetData.class.getName()).log(Level.SEVERE, null, ex);
}

Работает

try(FileWriter filewriter = new FileWriter(filepath)){
    filewriter.write(json.toString());
    saved = true;
} catch (IOException ex) {
    Logger.getLogger(PresetData.class.getName()).log(Level.SEVERE, null, ex);
}

Какая разница, если поместить его туда, а не в try/catch?

Спасибо за любое руководство.

1 ответ

Решение

Первый пример перехватывает только исключения, но никогда не освобождает ресурс. Вы должны закрыть его вручную, вызвав функцию.close() в блоке finally: https://docs.oracle.com/javase/7/docs/api/java/io/OutputStreamWriter.html

Второй пример называется "попробовать с ресурсами", как вы можете прочитать здесь: https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html-> Он автоматически вызовет функцию.close() для вас, так что вам не нужно беспокоиться о утечках ресурсов.

Обработка исключений через catch-block одинакова в обоих примерах.

Другие вопросы по тегам