2011-03-30 23 views
66

Estoy intentando eliminar imágenes almacenadas en el almacenamiento interno. Yo he llegado con esto hasta ahora:Eliminar archivo del almacenamiento interno

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

Y esto es de otra pregunta, que era answered with:

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.jpg en DDMS en eclipse.

Respuesta

92

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

File file = new File(ih.getImgPath(id)); 
boolean deleted = file.delete(); 
+16

puede usted por favor dígame lo que es 'ih' en su respuesta –

+0

Probablemente la abreviatura de "manipulador de la entrada". Ese constructor toma la ruta completa, incluido el nombre del archivo para abrir/crear. – videogameboy76

41

¿Has probado Context.deleteFile()?

+0

Probé una variante con Contex.deletFile(), que no funcionó. Debajo está lo que pareció funcionar. – Crunch

+0

@ user661543 ¿Cuál es la ruta completa devuelta por ih.getImgPath()? ¿Qué pasó 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 podría haber pasado un nombre de archivo incorrecto como argumento. –

+0

/data/data/xxxxxxx/2930.jpg – Crunch

8

También puede utilizar: file.getCanonicalFile().delete();

+0

Funcionó para mí, gracias :) –

2

¿Ha intentado getFilesDir().getAbsolutePath()?

Parece que ha solucionado el problema al inicializar el objeto Archivo con una ruta completa. Creo que esto también haría el truco.

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 es una solicitud para un objeto File. Está tratando de recuperar la cadena que declara la ruta a su directorio, por lo que necesita declarar 'dir' como una cadena, y luego solicitar que la ruta absoluta del directorio en forma de cadena sea devuelta por el constructor que tiene acceso a esa cadena. información.

10

Esto funciona para mí:

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

context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File(photoPath)))); 
+2

¿Hay alguna razón detrás de las 2 llamadas consecutivas a "new File (photoPath)"? – Astyan

+0

No hay razón para una nueva llamada de archivo para mí –

Cuestiones relacionadas