从内部存储删除文件


95

我正在尝试删除存储在内部存储器中的图像。到目前为止,我已经提出了:

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

这是另一个问题,回答了

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

我的示例始终返回false。我可以fx 2930.jpg在Eclipse中的DDMS中看到该文件。

Answers:


139

getFilesDir()不知何故没有工作。使用返回整个路径和文件名的方法可以得到所需的结果。这是代码:

File file = new File(inputHandle.getImgPath(id));
boolean deleted = file.delete();

哪里inputHandle.getImgPath(id)文件路径
PRATIK Butani

45

您是否尝试过Context.deleteFile()


使用Contex.deletFile()尝试了一个变体,但该变体不起作用。以下是似乎有效的方法。
紧缩

@ user661543 ih.getImgPath()返回的完整路径是什么?您作为删除文件的参数传递了什么?如果上述方法不起作用,则很可能是将文件存储在应用程序包之外。否则您可能传递了错误的文件名作为参数。
康斯坦丁·布罗夫

+1这是删除通过new OutputStreamWriter(context.openFileOutput(fileName, Context.MODE_PRIVATE)).write(data);
Eugen

18

这对我有用:

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

context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(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();不起作用,因为这是对File对象的请求。您正在尝试检索声明目录路径的String,因此您需要将'dir'声明为String,然后请求有权访问该信息的构造方法以String形式返回目录的绝对路径。 。


10

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


2

你试过了getFilesDir().getAbsolutePath()吗?

似乎您通过使用完整路径初始化File对象来解决了问题。我相信这也可以解决问题。


0

这是一个古老的话题,但是我会补充我的经验,也许有人会觉得这很有帮助

>     2019-11-12 20:05:50.178 27764-27764/com.strba.myapplicationx I/File: /storage/emulated/0/Android/data/com.strba.myapplicationx/files/Readings/JPEG_20191112_200550_4444350520538787768.jpg//file when it was created

2019-11-12 20:05:58.801 27764-27764/com.strba.myapplicationx I/File: content://com.strba.myapplicationx.fileprovider/my_images/JPEG_20191112_200550_4444350520538787768.jpg //same file when trying to delete it

解决方案1:

              Uri uriDelete=Uri.parse (adapter.getNoteAt (viewHolder.getAdapterPosition ()).getImageuri ());//getter getImageuri on my object from adapter that returns String with content uri

在这里,我初始化内容解析器,并使用该URI的传递参数将其删除

            ContentResolver contentResolver = getContentResolver ();
            contentResolver.delete (uriDelete,null ,null );

solution2(这是我的第一个解决方案,我确实知道):内容解析器存在...

              String path = "/storage/emulated/0/Android/data/com.strba.myapplicationx/files/Readings/" +
                    adapter.getNoteAt (viewHolder.getAdapterPosition ()).getImageuri ().substring (58);

            File file = new File (path);
            if (file != null) {
                file.delete ();
            }

希望这对编码愉快的人有所帮助


0
File file = new File(getFilePath(imageUri.getValue())); 
boolean b = file.delete();

在我的情况下不起作用。

boolean b = file.delete();                 // returns false
boolean b = file.getAbsolutePath.delete(); // returns false 

始终返回false。

使用以下代码已解决了该问题:

ContentResolver contentResolver = getContentResolver();
contentResolver.delete(uriDelete, null, null);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.