Java 为什么file.delete()不从磁盘删除资源?

Java 为什么file.delete()不从磁盘删除资源?,java,file,delete-file,Java,File,Delete File,我的问题是,我需要删除所有文件,即第一,第二,第三。但根据下面的代码,只有第三个文件从路径中被删除,而不是第一个和第二个。如何删除所有文件 ArrayList<File> filesToAdd = new ArrayList<File>(); filesToAdd.add(first); filesToAdd.add(second); filesToAdd.add(third); for (File file : file

我的问题是,我需要删除所有文件,即第一,第二,第三。但根据下面的代码,只有第三个文件从路径中被删除,而不是第一个和第二个。如何删除所有文件

ArrayList<File> filesToAdd = new ArrayList<File>();
        filesToAdd.add(first);
        filesToAdd.add(second);
        filesToAdd.add(third);

for (File file : filesToAdd) {
  if(file!=null && file.isFile()){
   file.delete();
  }         
 }
arraylistfilestoadd=newarraylist();
文件添加(第一个);
添加文件(第二);
添加文件(第三);
用于(文件:filesToAdd){
如果(file!=null&&file.isFile()){
delete();
}         
}

您尝试删除文件的代码。没有什么原因可以解释File.delete()

  • 您没有正确的删除权限
  • 该文件表示一个目录,并且该目录不是空的
  • 文件被另一个进程锁定(或者甚至被未关闭的FileOutputStream中的同一进程锁定)
  • 该文件不存在
方法delete()返回一个布尔值,通知您状态

for (File file : filesToAdd) {
  if(file!=null && file.isFile()){
   if(file.delete() == false) {
     //Add code what should happen 
   }
  }         
 }
请注意,您的代码已经过时,并且使用来自Java6的API

如果可以切换到最新版本8,则可以

List<Path> paths = new ArrayList<>();
        paths.add(first);
        paths.add(second);
        paths.add(third);

for (Path path : paths) {
  if(Files.isRegularFile(path)) {
     Files.delete(path);
  }        
 }
List path=new ArrayList();
路径。添加(第一);
路径。添加(第二个);
添加路径(第三个);
用于(路径:路径){
if(Files.isRegularFile(path)){
删除(路径);
}        
}

更改是
Files.delete(path)
将引发一个异常,告诉您为什么不能删除它

当我使用调试器运行应用程序时,if为所有文件返回true。
我无法传递file.delete(路径),因为路径是字符串。

1)这些文件不是目录吗?2) 您是否具有删除这些文件的正确权限?您的代码似乎正确。问题必须潜伏在您未发布的代码中的其他地方,或者存在于环境条件(如写权限)中。您是否使用调试器运行了它?if子句是否为前两个文件返回true?不要忽略delete()返回的布尔值。并使用Files.delete(Path)而不是File.delete()来获取解释问题所在的有意义的异常,而不是愚蠢的布尔值。您是否知道
File
.delete()
会以静默方式失败?如果使用Java 7或更高版本,则应改用Java.nio.file