尽管Tomcat用户没有删除权限,为什么我能够在Java代码中删除文件?
我的服务器正在运行以下代码,如果存在,则删除并重新创建文件:
File fileCSV = new File(filePath);
try {
if (fileCSV.exists()) {
fileCSV.delete();
}
fileCSV.createNewFile();
} catch (IOException ex) {
throw new FooImportException("Error creating new file");
}
尽管服务器使用的用户没有删除权限,但能够删除文件 - 只有读写权限。
我确信这些是相关权限,因为代码在文件创建行上失败而没有“创建文件/写入数据”权限。但是,如果缺少“删除”权限,它在删除行上不会失败。这可能是什么原因?
public boolean delete()
删除此抽象路径名表示的文件或目录。如果此路径名表示目录,则该目录必须为空才能被删除。 请注意,Files
类定义了delete
方法,以便在无法删除文件时抛出IOException
。这对于错误报告和诊断无法删除文件的原因很有用。返回:
true
当且仅当文件或目录被成功删除时;false
否则 抛出:SecurityException
- 如果存在安全管理器且其SecurityManager.checkDelete(java.lang.String)
方法拒绝删除对文件的访问权限
因此,当文件无法删除时,File#delete
实际上不会抛出Exception
,而是根据操作的成功返回boolean
。
如果Exception
对你很重要,那么你应该使用Files#delete
代替。
重要的是要注意 - 这只能解决基于可用代码的“为什么不失败”的问题,而不是基于可用文件权限的“它会失败”的问题