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.

Croquer
la source

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();
Croquer
la source
inputHandle.getImgPath(id)est filePath
Pratik Butani
45

Avez-vous essayé Context.deleteFile () ?

Konstantin Burov
la source
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)));
Jiyeh
la source
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 .

VikingGlen
la source
10

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

mvsjes2
la source
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.

Ronnie
la source
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);
Vishakha
la source
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

Nenad Štrbić
la source