【问题标题】:Java File Delete method is not working as expectedJava 文件删除方法未按预期工作
【发布时间】:2019-06-22 01:50:24
【问题描述】:

我必须处理数千个文件,但我的程序在 20 个文件后失败,但“没有剩余空间”例外。

这是我的伪代码。

for (Task t: tasks) {
    File f = t.createTempFile()
    processing(f)
    f.delete()
}

我检查了 /tmp 文件夹。文件没有被删除。我的头发都掉光了。谁能给点建议?

PS:它应该有创建文件的权限,所以它也应该有删除的权限。

【问题讨论】:

  • 您的 processing(...) 方法是在后台线程中工作,还是阻塞?
  • delete 当且仅当文件或目录被成功删除时才会返回 true;否则为false,检查返回值
  • 你的分号在哪里? Task 是在哪里定义的?
  • 如果某些大文件已被删除,但仍被某些进程打开,则可能会发生这种情况。使用命令 lsof | 检查grep deleted 查看哪些进程打开了已删除文件的描述符。您可以重新启动该过程,空间将被释放。

标签: java java-io


【解决方案1】:

这可能是因为您在文件上仍有一些输入或输出流,而您忘记关闭它。
如果 JVM 本身(在任何线程中)仍然持有文件的输入或输出流,它不会被删除。
正如上面评论中所说,您也可以检查方法的返回状态。

【讨论】:

  • 我仍在尝试找到保存输入流的对象。会让你知道它是否有效。发送
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-11
  • 2019-04-22
  • 2015-01-28
相关资源
最近更新 更多