Supprimer le fichier de la mémoire interne


95

J'essaye de supprimer les images stockées dans la mémoire interne. Je suis venu avec ceci jusqu'à présent:

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

Et cela provient d'une autre question, à laquelle on a répondu :

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

Mon exemple renvoie toujours faux. Je peux voir le fichier fx 2930.jpgdans DDMS dans eclipse.

Réponses:


139

Le getFilesDir()quelque peu n'a pas fonctionné. L'utilisation d'une méthode, qui renvoie le chemin d'accès et le nom de fichier complets, a donné le résultat souhaité. Voici le code:

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

inputHandle.getImgPath(id)est filePath
Pratik Butani

45

Avez-vous essayé Context.deleteFile () ?


J'ai essayé une variante avec Contex.deletFile (), qui n'a pas fonctionné. Voici ce qui semble fonctionner.
Crunch le

@ user661543 Quel est le chemin complet renvoyé par ih.getImgPath ()? Qu'est-ce que vous aviez passé comme argument pour supprimer le fichier? Si la méthode ci-dessus ne fonctionne pas, il est fort probable que votre fichier soit stocké hors du package d'application. Ou vous avez peut-être passé un nom de fichier incorrect comme argument.
Konstantin Burov le

+1 C'est le moyen le plus simple de supprimer un fichier écrit vianew OutputStreamWriter(context.openFileOutput(fileName, Context.MODE_PRIVATE)).write(data);
Eugen

18

Cela fonctionne pour moi:

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);

Le code File dir = getFilesDir();ne fonctionne pas car il s'agit d'une demande d'objet File. Vous essayez de récupérer la chaîne qui déclare le chemin de votre répertoire, vous devez donc déclarer 'dir' comme une chaîne, puis demander que le chemin absolu du répertoire sous forme de chaîne soit retourné par le constructeur qui a accès à ces informations .


10

Vous pouvez aussi utiliser: file.getCanonicalFile().delete();


2

Avez-vous essayé getFilesDir().getAbsolutePath()?

Il semble que vous avez résolu votre problème en initialisant l'objet File avec un chemin complet. Je pense que cela ferait également l'affaire.


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

ne fonctionne pas dans mon cas.

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

renvoie toujours false.

Le problème a été résolu en utilisant le code ci-dessous:

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

0

C'est un vieux sujet, mais j'ajouterai mon expérience, peut-être que quelqu'un trouvera cela utile

>     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

solution1:

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

ici, j'initialise le résolveur de contenu et le supprime avec un paramètre passé de cet URI

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

solution2 (ma première solution-de la tête en ce moment je sais que): le résolveur de contenu existe ...

              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 ();
            }

J'espère que cela sera utile à quelqu'un heureux de coder

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.