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

时间:2014-12-22 09:35:59

标签: java

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

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

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

11 个答案:

答案 0 :(得分:79)

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

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

答案 1 :(得分:24)

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

file.delete()

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

答案 2 :(得分:7)

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

Path fileToDeletePath = Paths.get("fileToDelete_jdk7.txt");
Files.delete(fileToDeletePath);

希望这会有所帮助。

答案 3 :(得分:1)

我正在研究这种类型的功能,也许这会让你们中的一些人感兴趣...

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;
}

答案 4 :(得分:1)

  File xx = new File("filename.txt");
    if (xx.exists()) {
       System.gc();//Added this part
       Thread.sleep(2000);////This part gives the Bufferedreaders and the InputStreams time to close Completely
       xx.delete();     
    }

答案 5 :(得分:0)

这是我的解决方案:

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

答案 6 :(得分:0)

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

FileUtils.forceDelete(FilePath);

注意:如果要使用,请使用exception handling代码。

答案 7 :(得分:0)

Apache Commons IO的FileUtils提供了FileUtils.deleteQuietly

  

删除文件,从不抛出异常。如果file是目录,请删除它和所有子目录。   File.delete()和此方法之间的区别是:

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

这提供了一个单线删除呼叫,如果文件删除失败,它不会抱怨:

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

答案 8 :(得分:0)

使用Apache Commons FileUtils.deleteDirectory() FileUtils.forceDelete()记录发生任何故障的异常,

FileUtils.deleteQuietly()(如果您不担心引发异常)。

答案 9 :(得分:0)

如果您的项目中的文件位于上传目录中。可以使用下面的代码。

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

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

OR

如果位于其他目录中,则可以使用此解决方案。

File existingFile = new File("D:\\<path>\\img.png");

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

答案 10 :(得分:0)

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

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

File f2 = new File("answer.txt");
f2.deleteOnExit();

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

File f3 = new File("answer.txt");
FileUtils.deleteDirectory(f3);

这个方法会在任何失败的情况下抛出异常。

 File f4 = new File("answer.txt");
 FileUtils.deleteQuietly(f4);

此方法不会抛出任何异常。