簡體   English   中英

Java刪除文件的更好方法(如果存在)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM