Я пишу Java 7-совместимую программу в Eclipse, и часть написанного мной кода говорит о утечке памяти. Вот мой код:
FileChannel output1 =
-->new FileOutputStream(System.getProperty("user.home")+"\\Desktop\\file\\output\\data.bin")<--
.getChannel();
output1.write(fileFinal);
output1.close();
FileChannel output2 =
-->new FileOutputStream(System.getProperty("user.home")+"\\Desktop\\file\\output\\data0.bin")<--
.getChannel();
output2.write(fileFinal);
output2.close();
FileChannel output3 =
-->new FileOutputStream(System.getProperty("user.home")+"\\Desktop\\file\\output\\data1.bin")<--
.getChannel();
output3.write(fileFinal);
output3.close();
FileChannel output4 =
-->new FileOutputStream(System.getProperty("user.home")+"\\Desktop\\file\\output\\data2.bin")<--
.getChannel();
output4.write(fileFinal);
output4.close();
Части между стрелками дают мне ошибку («Утечка ресурса:« (opencaret) unassigned Closeable value (closecaret) 'никогда не закрывается »). Обратите внимание, как я закрываю data.bin (output1) и data0.bin через data2.bin (output2 через output4) сразу после их записи. Что здесь происходит? Это ложный положительный результат или есть что-то более техническое в игре?
Примечание. Я заменил каретки в ошибке на (opencaret) и (closecaret), потому что редактор сообщений считает, что это HTML, и не будетпоказать каретки или их содержимое. Я могу понять, почему вы, ребята, для начала блокировали HTML (внедрение вредоносного кода), но должен быть более элегантный способ его обнаружения, не блокирующий ничего между каретками.
Я запускаю eclipse 2019-06 (4.12.0) в Windows 10 Pro с установленными JDK 1.8.0_221 и JRE 1.8.0_221, и в проекте используется соответствие компилятора Java 1.7 (для совместимости со старыми установками Java, поскольку некоторые системы, которые запускают это, могут толькозапускать .jars как апплеты в браузере, и большинство браузеров отключили поддержку плагинов NPAPI и, таким образом, предотвратили обновления плагинов для Java-браузеров.)Это рабочий код:
try (FileOutputStream fos1 = new FileOutputStream(System.getProperty("user.home")+"\\Desktop\\file\\output\\data.bin");
FileChannel output1 = fos1.getChannel())
{
output1.write(fileFinal);
output1.close();
}
catch (IOException i)
{
}
fileFinal.position(0);
try (FileOutputStream fos2 = new FileOutputStream(System.getProperty("user.home")+"\\Desktop\\file\\output\\data0.bin");
FileChannel output2 = fos2.getChannel())
{
output2.write(fileFinal);
output2.close();
}
catch (IOException j)
{
}
fileFinal.position(0);
try (FileOutputStream fos3 = new FileOutputStream(System.getProperty("user.home")+"\\Desktop\\file\\output\\data1.bin");
FileChannel output3 = fos3.getChannel())
{
output3.write(fileFinal);
output3.close();
}
catch (IOException k)
{
}
fileFinal.position(0);
try (FileOutputStream fos4 = new FileOutputStream(System.getProperty("user.home")+"\\Desktop\\file\\output\\data2.bin");
FileChannel output4 = fos4.getChannel())
{
output4.write(fileFinal);
output4.close();
}
catch (IOException l)
{
}
Спасибо @holger за исправление.