1

我编写代码来删除文件,就像:

File logFile = new File(fileName);

deleteSuccess = logFile.delete();

但是 Veracode:给我一些关于资源未释放的警告。我想知道删除文件后如何释放资源。

Veracode 错误如下

验证码:

描述
应用程序未能释放(或错误地释放)系统资源,然后才能重新使用。这种情况经常发生在数据库连接或文件句柄等资源中。大多数未释放的资源问题会导致一般的软件可靠性问题,但如果攻击者可以故意触发资源泄漏,则有可能通过耗尽资源池来发起拒绝服务攻击。

建议 在创建或分配资源时,开发人员负责正确释放资源并考虑所有可能的到期或失效路径。确保所有代码路径正确释放资源。

4

2 回答 2

1

你确定这是你的全部代码吗?因为它没有任何问题。File 对象只是文件名的包装器,没有为它分配资源。删除方法也只是调用适当的操作系统函数,之后不需要任何清理。

您需要关闭的是从文件派生的流(但您似乎没有)。

于 2010-09-09T03:30:37.083 回答
0

一旦删除操作成功,您可以尝试显式地使File对象无效(如有必要,请检查返回的布尔值,但如果删除操作失败,我不知道您的意图)。至少这样,您可以确信对File对象的引用丢失了,因此所有相关对象也有资格进行垃圾回收。

如果 VercaCode 继续将此标记为警告,我认为您可能有理由忽略此问题。

虽然建议的更改不会增加任何价值,特别是如果 File 对象一旦超出范围就可以进行垃圾收集,如果您热衷于摆脱此警告,则可以采用这种做法。

于 2010-09-09T05:02:29.507 回答