Затмение (Juno) дает следующее предупреждение:Почему этот код генерирует предупреждение о потенциальной утечке ресурсов?
Потенциальные утечки ресурсов: 'ОС' не может быть закрыт
на первой линии try
тела в этом коде:
static void saveDetails(byte[] detailsData) {
OutputStream os = null;
try {
os = sContext.openFileOutput(DETAILS_FILE_NAME, Context.MODE_PRIVATE);
os.write(detailsData);
} catch (IOException e) {
Log.w(LOG_TAG, "Unable to save details", e);
} finally {
if (os != null) {
try {
os.close();
} catch (IOException ignored) {
}
}
}
}
Объявлен способ openFileOutput
выбросить FileNotFoundException
.
Является ли это ложным положительным? Это похоже на довольно ванильный анализ пути выполнения.
Было бы проще, если бы вы указали, какое затмение линии жалуется, но я бы предположил, что это связано с линией openFileOuput. Как долго работает открытый объект? Нужно ли закрывать файл? – atk
@atk - OP указывает, что предупреждение находится в первой строке тела try. Итак, 'os = sContext.OpenFileOutput ...'. –
Если 'sContext' равно null, тогда исключение NullPointerException будет выбрано, и, наконец, он никогда не будет запущен, так как это не исключение Except. В этом случае 'os' не будет закрыто (или открыто). –