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