Elimina il file dalla memoria interna


95

Sto cercando di eliminare le immagini archiviate nella memoria interna. Finora ho pensato a questo:

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

E questo è da un'altra domanda, a cui è stata data risposta :

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

Il mio esempio restituisce sempre false. Posso vedere il file fx 2930.jpgin DDMS in eclipse.

Risposte:


139

In getFilesDir()qualche modo non ha funzionato. L'uso di un metodo, che restituisce l'intero percorso e il nome del file, ha dato il risultato desiderato. Ecco il codice:

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

Dove si inputHandle.getImgPath(id)trova filePath
Pratik Butani

45

Hai provato Context.deleteFile () ?


Ho provato una variante con Contex.deletFile (), che non ha funzionato. Di seguito è riportato ciò che sembrava funzionare.
Crunch

@ user661543 Qual è il percorso completo restituito da ih.getImgPath ()? Cosa hai passato come argomento per eliminare il file? Se il metodo sopra non ha funzionato, molto probabilmente ha memorizzato il tuo file fuori dal pacchetto dell'applicazione. Oppure potresti aver passato un nome file errato come argomento.
Konstantin Burov

+1 È il modo più semplice per rimuovere il file scritto tramitenew OutputStreamWriter(context.openFileOutput(fileName, Context.MODE_PRIVATE)).write(data);
Eugen

18

Questo funziona per me:

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

Il codice File dir = getFilesDir();non funziona perché questa è una richiesta per un oggetto File. Stai tentando di recuperare la stringa che dichiara il percorso della tua directory, quindi devi dichiarare "dir" come una stringa e quindi richiedere che il percorso assoluto della directory in formato String venga restituito dal costruttore che ha accesso a tali informazioni .


10

Puoi anche usare: file.getCanonicalFile().delete();


2

Hai provato getFilesDir().getAbsolutePath()?

Sembra che tu abbia risolto il problema inizializzando l'oggetto File con un percorso completo. Credo che anche questo farebbe il trucco.


0

Questo è un vecchio argomento, ma aggiungerò la mia esperienza, forse qualcuno lo trova 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

soluzione1:

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

qui inizializzo il risolutore di contenuti e lo elimino con un parametro passato di quell'URI

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

solution2 (la mia prima soluzione, dalla testa in questo momento lo so): il risolutore di contenuti esiste ...

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

Spero che questo possa essere utile a qualcuno felice di programmare


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

non funziona nel mio caso.

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

restituisce sempre false.

Il problema è stato risolto utilizzando il codice seguente:

ContentResolver contentResolver = getContentResolver();
contentResolver.delete(uriDelete, null, null);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.