4

我想删除java中的一个文件。它会生成这个结果。我怎样才能删除该文件。这是什么原因。

File l_file = new File(path);
System.out.println(l_file.exists()); //returns true
System.out.println(l_file.delete()); //returns false

谢谢你。

4

6 回答 6

1

文件删除失败的原因有多种。例如,如果另一个进程正在持有它的句柄,或者您无权删除此文件。在这两种情况下,您都可以检查文件是否存在,但不能删除它。

于 2013-01-30T12:17:47.347 回答
0

无法删除文件的原因有很多。最有可能的情况是该文件在另一个进程中打开,或者您的进程启动时使用的权限低于删除该文件所需的权限。

于 2013-01-30T12:18:46.773 回答
0

第一个原因是path可以是目录

javadoc File#delete()

If this pathname denotes a directory, then the directory must be empty in order to be deleted.

检查路径是否为空目录:

if (l_file.isDirectory()) {
   String[] files = l_file.list();
      if (files.length > 0) {
         System.out.println("The " + l_file.getPath() + " is not empty!");
      }
}

您无法删除 a 的另一个原因path是您没有许可证

检查您的许可:

if (l_file.canWrite())
   l_file.delete();
于 2013-01-30T12:22:35.097 回答
0

也许您可以尝试使用以下File方法检查它是否是文件(而不是目录)其权限:

boolean isFile() // if it is a directory it must be empty
boolean canWrite()
boolean canRead()
boolean canExecute()

此外,正如您在 Java API 中所读到的:“在某些操作系统上,当该 Java 虚拟机或其他程序打开并使用该文件时,可能无法删除该文件。”

如果您在 Linux 中,您可以尝试lsof <file_name>以了解哪个进程打开了此文件。

于 2013-01-30T12:24:18.470 回答
0

您也可以尝试FileChannel.lock()FileChannel.tryLock()查看是否可以在删除之前获取锁。

于 2013-01-30T13:17:24.830 回答
0

有两种方法可以解决它。

  1. 转到文件并将其属性更改为完全控制
  2. 如果您打开了 PrintWriter 或 Scanner 类,您应该关闭该类,尤其是 Scanner 对象.Close 在此处输入图像描述
于 2018-12-13T01:48:24.917 回答