Excluir arquivo do armazenamento interno


95

Estou tentando excluir imagens armazenadas no armazenamento interno. Eu descobri isso até agora:

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

E isso é de outra pergunta, que foi respondida com :

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

Meu exemplo sempre retorna falso. Eu posso ver o arquivo fx 2930.jpgem DDMS no eclipse.

Respostas:


139

O de getFilesDir()alguma forma não funcionou. Usando um método, que retorna o caminho inteiro e o nome do arquivo deu o resultado desejado. Aqui está o código:

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

Onde inputHandle.getImgPath(id)está filePath
Pratik Butani

45

Você tentou Context.deleteFile () ?


Tentei uma variante com Contex.deletFile (), que não funcionou. Abaixo está o que pareceu funcionar.
Crunch de

@ user661543 Qual é o caminho completo retornado pelo ih.getImgPath ()? O que você passou como argumento para deletar arquivo? Se o método acima não funcionou, provavelmente armazenou o arquivo fora do pacote do aplicativo. Ou você pode ter passado um nome de arquivo errado como argumento.
Konstantin Burov,

+1 É a maneira mais simples de remover arquivos escritos vianew OutputStreamWriter(context.openFileOutput(fileName, Context.MODE_PRIVATE)).write(data);
Eugen

18

Isso funciona para mim:

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

O código File dir = getFilesDir();não funciona porque esta é uma solicitação para um objeto File. Você está tentando recuperar a String que declara o caminho para seu diretório, então você precisa declarar 'dir' como uma String e, em seguida, solicitar que o caminho absoluto do diretório na forma de String seja retornado pelo construtor que tem acesso a essas informações .


10

Você também pode usar: file.getCanonicalFile().delete();


2

Você já tentou getFilesDir().getAbsolutePath()?

Parece que você corrigiu o problema inicializando o objeto File com um caminho completo. Eu acredito que isso também funcionaria.


0

Este é um tópico antigo, mas acrescentarei minha experiência, talvez alguém considere isso ú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

solução1:

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

aqui eu inicializo o resolvedor de conteúdo e o excluo com um parâmetro passado desse URI

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

solution2 (minha primeira solução-from head neste momento eu sei disso): o resolvedor de conteúdo 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 isso seja útil para alguém feliz em programar


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

não está funcionando no meu caso.

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

sempre retorna falso.

O problema foi resolvido usando o código abaixo:

ContentResolver contentResolver = getContentResolver();
contentResolver.delete(uriDelete, null, null);
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.