Java - 删除目录 - IOException: 无法删除目录

7
我正在尝试删除两个代码库。
org.apache.commons.io.FileUtils.deleteDirectory(jobInDirectory);
org.apache.commons.io.FileUtils.deleteDirectory(jobOutDirectory);

路径正确

目录的权限也正确

第一个删除成功了,但第二个没有。目录内的所有文件都被删除了,但目录本身还存在。

java.io.IOException: Unable to delete directory /opt/appdata/conv/data/out/Job000000000676.

我查看了使用命令lsfo来检测是否有其他进程锁定它,但没有其他进程在使用它...

有什么想法吗?


谢谢您的回复。 在存储库 /opt/appdata/conv/data/in 中一切正常,但在 /opt/appdata/conv/data/out 中却不行。它们具有相同的权限。 在 /opt/appdata/conv/data/out 中,文件可以被成功删除,只是目录无法删除。 我的应用程序具有与我在提示符中使用的用户相同的权限和组。 - Alexandre
5个回答

3
您需要检查以下内容以解决此问题:-
  1. User Id/account with which you are running your application must have permission to delete the below directory. If you are running the java application with your account then you must have permission to delete the below directory.

     /opt/appdata/conv/data/out/Job000000000676
    
  2. Add the account into the proper group. To do that first check with ls -ltr execute it inside /opt/appdata/conv/data/out and add your account to the group which has full permission to delete directories inside out directory

  3. Also check if Job000000000676 has sub directory inside it. In such a condition you can execute unix command like rm -rf /opt/appdata/conv/data/out/Job000000000676. See how to execute unix command from java application for detail.

希望这能帮到您。

谢谢您的回复。 在存储库 /opt/appdata/conv/data/in 中一切正常,但在 /opt/appdata/conv/data/out 中却不行。它们具有相同的权限。 在 /opt/appdata/conv/data/out 中,文件可以被成功删除,只是目录无法删除。 我的应用程序具有与我在提示符中使用的用户相同的权限和组。 - Alexandre

1

您的文件夹中有文件吗?如果有,请在删除文件夹之前先删除它们。


deleteDirectory()将按照文档递归删除。如果它想要删除空文件夹,那么递归的意义是什么?相反,我会使用通用的file.delete()来删除空文件夹。 - User

1

你检查了目录/文件的权限,确保执行命令的用户具有足够的权限了吗?

或者,如果另一个进程正在使用该文件,也会导致问题。假设你使用的是基于Linux的操作系统,请尝试使用命令:fuser /opt/appdata/conv/data/out/Job000000000676

祝好运


0
在你的代码中,检查是否在删除之前的任何实例中打开了文件,可能你正在使用一个缓冲读取器。 确保在删除之前关闭文件读取器或缓冲读取器。

-1
请检查您的磁盘空间并保持足够的空间。有时由于空间不足,无法执行IO任务。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接