我想删除java中的一个文件。它会生成这个结果。我怎样才能删除该文件。这是什么原因。
File l_file = new File(path);
System.out.println(l_file.exists()); //returns true
System.out.println(l_file.delete()); //returns false
谢谢你。
我想删除java中的一个文件。它会生成这个结果。我怎样才能删除该文件。这是什么原因。
File l_file = new File(path);
System.out.println(l_file.exists()); //returns true
System.out.println(l_file.delete()); //returns false
谢谢你。
文件删除失败的原因有多种。例如,如果另一个进程正在持有它的句柄,或者您无权删除此文件。在这两种情况下,您都可以检查文件是否存在,但不能删除它。
无法删除文件的原因有很多。最有可能的情况是该文件在另一个进程中打开,或者您的进程启动时使用的权限低于删除该文件所需的权限。
第一个原因是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();
也许您可以尝试使用以下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>
以了解哪个进程打开了此文件。
您也可以尝试FileChannel.lock()
或FileChannel.tryLock()
查看是否可以在删除之前获取锁。
有两种方法可以解决它。
.Close