如果存在,Java更好的删除文件的方法

Mic*_*hmi 46 java

我们需要调用file.exists()之前file.delete()才可以删除文件,例如:

 File file = ...;
 if (file.exists()){
     file.delete();
 }  
Run Code Online (Sandbox Code Playgroud)

目前在我们的所有项目中,我们在一些util类中创建一个静态方法来包装此代码.是否有其他方法可以实现相同的目的,因此我们不需要在每个其他项目中复制我们的utils文件.

sol*_*4me 82

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

File file = ...;
boolean result = Files.deleteIfExists(file.toPath()); //surround it in try catch block
Run Code Online (Sandbox Code Playgroud)


Mar*_*aux 25

在我的机器上,我可以这样做:

file.delete()
Run Code Online (Sandbox Code Playgroud)

如果文件不存在,则返回false.

  • 好吧,如果它尚不存在,则无法删除它,这意味着这应该返回 false。 (4认同)

Eug*_*gen 9

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

Path fileToDeletePath = Paths.get("fileToDelete_jdk7.txt");
Files.delete(fileToDeletePath);
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.


小智 5

Apache Commons IO 的FileUtils提供FileUtils.deleteQuietly

删除文件,从不抛出异常。如果 file 是一个目录,则删除它和所有子目录。File.delete() 与该方法的区别是:

  • 要删除的目录不必为空。
  • 当无法删除文件或目录时,不会引发异常。

这提供了一个单行删除调用,如果文件删除失败,它不会抱怨:

FileUtils.deleteQuietly(new File("test.txt"));
Run Code Online (Sandbox Code Playgroud)