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

相关问题