Eliminar archivo del almacenamiento interno

95

Estoy intentando borrar las imágenes almacenadas en el almacenamiento interno. Se me ocurrió esto hasta ahora:

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

Y esto es de otra pregunta, que fue respondida con :

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

Mi ejemplo siempre devuelve falso. Puedo ver el archivo fx 2930.jpgen DDMS en eclipse.

Crujido
fuente

Respuestas:

139

De getFilesDir()alguna manera no funcionó. El uso de un método que devuelve la ruta completa y el nombre del archivo dio el resultado deseado. Aquí está el código:

File file = new File(inputHandle.getImgPath(id));
boolean deleted = file.delete();
Crujido
fuente
¿Dónde inputHandle.getImgPath(id)está filePath
Pratik Butani
45

¿Has probado Context.deleteFile () ?

Konstantin Burov
fuente
Probé una variante con Contex.deletFile (), que no funcionó. A continuación se muestra lo que pareció funcionar.
Crunch
@ user661543 ¿Cuál es la ruta completa devuelta por ih.getImgPath ()? ¿Qué había pasado como argumento para eliminar el archivo? Si el método anterior no funcionó, lo más probable es que haya almacenado su archivo fuera del paquete de la aplicación. O puede haber pasado un nombre de archivo incorrecto como argumento.
Konstantin Burov
1 Se forma más sencilla de quitar al archivo escrito víanew OutputStreamWriter(context.openFileOutput(fileName, Context.MODE_PRIVATE)).write(data);
Eugen
18

Esto funciona para mi:

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

context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));
Jiyeh
fuente
14
String dir = getFilesDir().getAbsolutePath();
File f0 = new File(dir, "myFile");
boolean d0 = f0.delete(); 
Log.w("Delete Check", "File deleted: " + dir + "/myFile " + d0);

El código File dir = getFilesDir();no funciona porque se trata de una solicitud de un objeto File. Está intentando recuperar la cadena que declara la ruta a su directorio, por lo que debe declarar 'dir' como una cadena, y luego solicitar que el constructor que tiene acceso a esa información devuelva la ruta absoluta del directorio en forma de cadena. .

VikingGlen
fuente
10

También puedes usar: file.getCanonicalFile().delete();

mvsjes2
fuente
2

¿Usted ha intentado getFilesDir().getAbsolutePath()?

Parece que solucionó su problema inicializando el objeto Archivo con una ruta completa. Creo que esto también funcionaría.

Ronnie
fuente
0

Este es un tema antiguo, pero agregaré mi experiencia, tal vez alguien lo encuentre útil

>     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

aquí inicializo el solucionador de contenido y lo elimino con un parámetro pasado de ese URI

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

solution2 (mi primera solución, desde la cabeza en este momento, lo sé): el solucionador de contenido 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 ();
            }

Espero que esto sea útil para alguien feliz codificando

Nenad Štrbić
fuente
0
File file = new File(getFilePath(imageUri.getValue())); 
boolean b = file.delete();

no funciona en mi caso.

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

siempre devuelve falso.

El problema se ha resuelto mediante el siguiente código:

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