尽管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");
}
尽管服务器用户没有删除权限,但能够删除文件 - 只有读写权限。
我确信这些是相关权限,因为代码在文件创建行上失败而没有"创建文件/写入数据"权限。但是,当缺少"删除"删除行时它不会失败允许。 可能是什么原因?
答案 0 :(得分:1)
public boolean delete()
删除表示的文件或目录 这个抽象的路径名。如果此路径名表示目录,那么 目录必须为空才能被删除。
请注意Files
class定义delete
方法在文件时抛出IOException
无法删除。这对错误报告和诊断很有用 为什么文件无法删除。当且仅当文件或目录成功时,返回:
true
删除;false
否则为:SecurityException
- 如果是 安全经理存在及其SecurityManager.checkDelete(java.lang.String)
方法拒绝删除 访问文件
因此,File#delete
在文件无法删除时实际上不会抛出Exception
,而是根据操作成功返回boolean
。
如果Exception
对您很重要,那么您应该使用Files#delete
代替。
重要的是要注意 - 这只能根据可用的代码解决“为什么不会失败”的问题,而不是根据可用的文件权限解决“它会失败”的问题