[英]Java better way to delete file if exists
我們需要調用file.exists()
之前file.delete()
之前,我們可以刪除一個文件,例如:
File file = ...;
if (file.exists()){
file.delete();
}
目前,在我們所有的項目中,我們在一些 util 類中創建了一個靜態方法來包裝此代碼。 有沒有其他方法可以實現相同的目的,這樣我們就不需要在每個其他項目中復制我們的 utils 文件。
從 Java 7 開始,您可以使用deleteIfExists返回布爾值(或拋出異常),具體取決於文件是否被刪除。 對於其他文件系統操作,此方法可能不是原子的。 此外,如果 JVM/其他程序正在使用文件,那么在某些操作系統上它將無法刪除它。 每個文件都可以通過toPath
方法轉換為路徑。 例如
File file = ...;
boolean result = Files.deleteIfExists(file.toPath()); //surround it in try catch block
file.delete();
如果文件不存在,它將返回false。
還有 Java 7 解決方案,使用 new(ish) Path 抽象:
Path fileToDeletePath = Paths.get("fileToDelete_jdk7.txt");
Files.delete(fileToDeletePath);
希望這可以幫助。
Apache Commons IO 的FileUtils提供FileUtils.deleteQuietly
:
刪除文件,從不拋出異常。 如果文件是一個目錄,刪除它和所有子目錄。 File.delete() 和這個方法的區別是:
- 要刪除的目錄不必為空。
- 無法刪除文件或目錄時不會引發異常。
這提供了一個單行刪除調用,如果文件刪除失敗,它不會抱怨:
FileUtils.deleteQuietly(new File("test.txt"));
我正在研究這種類型的功能,也許這會讓你們中的一些人感興趣......
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);
注意:如果要使用,請使用exception handling
代碼。
使用 Apache Commons FileUtils.deleteDirectory()或FileUtils.forceDelete()在出現任何故障時記錄異常,
或者FileUtils.deleteQuietly()如果你不關心拋出的異常。
如果您在項目中的名為 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();
}
通常我們創建文件對象並檢查文件是否存在然后刪除。
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);
該方法不會拋出任何異常。
這是我的解決方案:
File f = new File("file.txt");
if(f.exists() && !f.isDirectory()) {
f.delete();
}
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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.