Java是删除文件(如果存在)的更好方法

Java是删除文件(如果存在)的更好方法,java,Java,我们需要在file.delete()之前调用file.exists(),然后才能删除文件,例如 File file = ...; if (file.exists()){ file.delete(); } 目前在我们所有的项目中,我们在一些util类中创建了一个静态方法来包装这段代码。是否有其他方法可以达到同样的效果,这样我们就不需要在每个其他项目中复制我们的UTIL文件。从Java 7开始,您可以使用它返回布尔值(或引发异常),具体取决于文件是否被删除。相对于其他文件系统操

我们需要在
file.delete()之前调用
file.exists()
,然后才能删除文件,例如

 File file = ...;
 if (file.exists()){
     file.delete();
 }  

目前在我们所有的项目中,我们在一些util类中创建了一个静态方法来包装这段代码。是否有其他方法可以达到同样的效果,这样我们就不需要在每个其他项目中复制我们的UTIL文件。

从Java 7开始,您可以使用它返回布尔值(或引发异常),具体取决于文件是否被删除。相对于其他文件系统操作,此方法可能不是原子的。此外,如果JVM/其他程序正在使用某个文件,那么在某些操作系统上,它将无法删除该文件。每个文件都可以通过
toPath
方法转换为路径。例如

File file = ...;
boolean result = Files.deleteIfExists(file.toPath()); //surround it in try catch block

还有Java 7解决方案,使用新的(ish)路径抽象:

Path fileToDeletePath = Paths.get("fileToDelete_jdk7.txt");
Files.delete(fileToDeletePath);
希望这有帮助

file.delete();
如果文件不存在,它将返回false。

这是我的解决方案:

File f = new File("file.txt");
if(f.exists() && !f.isDirectory()) { 
    f.delete();
}

我在做这种功能,也许你们中的一些人会感兴趣

public boolean deleteFile(File file) throws IOException {
    if (file != null) {
        if (file.isDirectory()) {
            File[] files = file.listFiles();

            for (File f: files) {
                deleteFile(f);
            }
        }
        return Files.deleteIfExists(file.toPath());
    }
    return false;
}

使用以下语句删除任何文件:

FileUtils.forceDelete(FilePath);
注意:如果您想使用,请使用
异常处理
代码。

Apache Commons IO提供的
FileUtils.deletequity

删除文件,从不引发异常。如果文件是一个目录,请删除它和所有子目录。 File.delete()与此方法的区别是:

  • 要删除的目录不必为空
  • 无法删除文件或目录时不会引发异常
这提供了一个一行删除调用,如果文件未能删除,则不会抱怨:

FileUtils.deleteQuietly(new File("test.txt"));

使用Apache CommonsFileUtils.deleteDirectory()FileUtils.forceDelete()记录任何故障时的异常


或者FileUtils.deletequiety(),如果您不关心抛出的异常。

如果您的项目中有一个名为uploads的目录中的文件。可以使用以下代码

Path root = Paths.get("uploads");
File existingFile = new File(this.root.resolve("img.png").toUri());

if (existingFile.exists() && existingFile.isFile()) {
     existingFile.delete();
   }
File existingFile = new File("D:\\<path>\\img.png");

if (existingFile.exists() && existingFile.isFile()) {
    existingFile.delete();
  }

如果它位于不同的目录中,则可以使用此解决方案

Path root = Paths.get("uploads");
File existingFile = new File(this.root.resolve("img.png").toUri());

if (existingFile.exists() && existingFile.isFile()) {
     existingFile.delete();
   }
File existingFile = new File("D:\\<path>\\img.png");

if (existingFile.exists() && existingFile.isFile()) {
    existingFile.delete();
  }
File existingFile=新文件(“D:\\\\img.png”);
if(existingFile.exists()&&existingFile.isFile()){
existingFile.delete();
}

通常我们创建文件对象,检查文件是否存在,然后删除

File f1 = new File("answer.txt");
if(f1.exists()) { 
    f1.delete();
}

如果您使用Apache Common,那么下面是您可以删除文件和目录的选项

File f3 = new File("answer.txt");
FileUtils.deleteDirectory(f3);
如果出现任何故障,此方法将抛出异常


此方法不会引发任何异常。

为什么在此过程中调用
System.gc()
?在这种情况下,它完全没有用,只会引起噪音。这并不能回答问题。OP知道这是可行的,但要求提供一种更好的技术,它不需要每次检查
if
,每次只需添加样板代码。@ZhaoGang实际上你必须尝试/抓住这一点。查看来自JDK的签名:
public静态布尔deleteIfExists(Path-Path)抛出IOException{return provider(Path).deleteIfExists(Path);}
您可以向上传递throws声明,但尝试在流中使用它,而不使用try/catch,并编译它而不出错:)如果文件被此方法删除,则此方法返回true;如果文件不存在而无法删除,则为false。@疯狂地说:Files.delete()是一个void方法。您考虑的是myFile.delete(),如果文件不存在,则返回false,如果文件不存在,则返回false。如果文件不存在,则无法删除,这意味着该文件应返回false。
 File f4 = new File("answer.txt");
 FileUtils.deleteQuietly(f4);