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 одинакова в обоих примерах.