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

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

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

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

145699 次浏览

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

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

还有 Java7解决方案,使用了新的(ish) Path 抽象:

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

使用以下语句删除所有文件:

FileUtils.forceDelete(FilePath);

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

Apache Commons IO 的 FileUtils提供 FileUtils.deleteQuietly:

删除文件,永远不要抛出异常。如果文件是一个目录,删除它和所有子目录。 Delete ()和这个方法的区别是:

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

这提供了一个一行程序的删除调用,如果文件未能被删除,它不会抱怨:

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

使用 Apache Commons Delete teDirectory ()强制删除()在任何失败的情况下记录异常,

或者 (),如果您不关心引发的异常。

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

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 对象并检查 File Exist 是否然后删除。

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

或者

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

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

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

此方法在出现任何故障时引发异常。

或者

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

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