2011-03-30 70 views
66

我試圖刪除存儲在內部存儲器中的圖像。我想出了這個至今:從內部存儲器中刪除文件

File dir = getFilesDir(); 
File file = new File(dir, id+".jpg"); 
boolean deleted = file.delete(); 

這是另外一個問題,這是answered with

File dir = getFilesDir(); 
File file = new File(dir, "my_filename"); 
boolean deleted = file.delete(); 

我的例子總是返回false。我可以在eclipse中看到DDMS中的文件fx 2930.jpg

回答

92

getFilesDir()莫名其妙地沒有工作。 使用返回整個路徑和文件名的方法給出了所需的結果。以下是代碼:

File file = new File(ih.getImgPath(id)); 
boolean deleted = file.delete(); 
+16

可以請你告訴我什麼是'ih'在你的答案 – 2014-05-07 09:49:39

+0

也許短期的「輸入處理」。該構造函數採用包含文件的文件名的完整路徑來打開/創建。 – videogameboy76 2015-01-20 15:28:12

41

您試過Context.deleteFile()

+0

用Contex.deletFile()嘗試了一個變體,它沒有工作。以下是似乎工作。 – Crunch 2011-04-01 04:24:42

+0

@ user661543 ih.getImgPath()返回的完整路徑是什麼?你作爲參數傳遞了什麼來刪除文件?如果上面的方法不起作用,那麼很可能將您的文件存儲在應用程序包中。或者您可能傳遞了錯誤的文件名作爲參數。 – 2011-04-01 07:27:41

+0

/data/data/xxxxxxx/2930.jpg – Crunch 2011-04-06 08:06:20

8

您還可以使用:file.getCanonicalFile().delete();

+0

爲我工作,謝謝:) – 2013-10-21 16:34:50

2

你試過getFilesDir().getAbsolutePath()

似乎通過用完整路徑初始化File對象來解決了您的問題。我相信這也可以做到。

14
String dir = getFilesDir().getAbsolutePath(); 
File f0 = new File(dir, "myFile"); 
boolean d0 = f0.delete(); 
Log.w("Delete Check", "File deleted: " + dir + "/myFile " + d0); 

代碼File dir = getFilesDir();不起作用,因爲這是一個文件對象的請求。 您試圖檢索聲明目錄路徑的字符串,因此您需要將'dir'聲明爲String,然後請求以有權訪問的構造函數返回String形式的目錄絕對路徑信息。

10

這個工作對我來說:

File file = new File(photoPath); 
file.delete(); 

context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(photoPath)))); 
+2

連續2次調用「新建文件(photoPath)」是否有原因? – Astyan 2017-08-24 21:55:22

+0

沒有理由爲我新的文件電話 – 2018-01-28 06:59:09

相關問題