Desejo que os usuários do meu aplicativo possam excluir a pasta DCIM (que está localizada no cartão SD e contém subpastas).
Isso é possível? Em caso afirmativo, como?
android
file-io
directory
delete-directory
Principiante
fonte
fonte
rm -rf directory
vez deFileUtils.deleteDirectory
. Após o benchmarking, descobrimos que era várias vezes mais rápido. Confira um exemplo de implementação aqui: stackoverflow.com/a/58421350/293280Respostas:
Deixe-me dizer a primeira coisa que você não pode excluir a pasta DCIM porque é uma pasta do sistema. Ao excluí-lo manualmente no telefone, o conteúdo dessa pasta será excluído, mas não a pasta DCIM. Você pode excluir seu conteúdo usando o método abaixo:
Atualizado conforme os comentários
fonte
Você pode excluir arquivos e pastas recursivamente assim:
fonte
DCIM\foo\bar\pic.jpg
). Nesse caso, o código do chirag falhará.fileOrDirectory.listFiles()
pode retornarnull
se houver erro de E / S ao ler os arquivos. Isso está claramente indicado na documentação: developer.android.com/reference/java/io/File.html#listFiles ()Podemos usar os argumentos da linha de comando para excluir uma pasta inteira e seu conteúdo.
Exemplo de uso do código acima:
fonte
No Kotlin você pode usar a
deleteRecursively()
extensão dokotlin.io
pacotefonte
FilesKt.deleteRecursively(new File("/path/to/dir"));
se você estiver usando o kotlin-stdlibuse o método abaixo para excluir todo o diretório principal que contém arquivos e seu subdiretório. Depois de chamar esse método, chame novamente o diretório delete () do seu diretório principal.
fonte
Sua abordagem é decente para uma pasta que contém apenas arquivos, mas se você estiver procurando por um cenário que também contenha subpastas, a recursão será necessária.
Além disso, você deve capturar o valor de retorno para garantir que você tenha permissão para excluir o arquivo
e inclua
no seu manifesto
fonte
Existem muitas respostas, mas decidi adicionar as minhas, porque é um pouco diferente. É baseado em OOP;)
Criei a classe DirectoryCleaner , que me ajuda sempre que preciso limpar algum diretório.
Pode ser usado para resolver esse problema da próxima maneira:
fonte
Se você não precisar excluir as coisas recursivamente, tente algo como isto:
fonte
Você não pode excluir o diretório se ele tiver subdiretórios ou arquivos em Java. Experimente esta solução simples de duas linhas. Isso excluirá o diretório e os concursos dentro do diretório.
Adicione esta linha no arquivo gradle e sincronize o projeto
fonte
fonte
veja android.os.FileUtils, está oculto na API 21
Fonte: https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/os/FileUtils.java#414
fonte
De acordo com a documentação :
Portanto, você deve verificar se
listFiles
énull
e continuar apenas se não forfonte
Isto é o que eu faço ... (conciso e testado)
fonte
fonte
Maneira simples de excluir todos os arquivos do diretório:
É uma função genérica para excluir todas as imagens do diretório chamando apenas
deleteAllImageFile (contexto);
fonte
Código mais seguro que eu conheço:
Verifica se o arquivo existe, trata nulos, verifica se o diretório foi realmente excluído
fonte
Versão curta koltin
fonte
Aqui está uma implementação não recursiva, apenas por diversão:
fonte
Isso (tenta excluir todos os subarquivos e subdiretórios, incluindo o diretório fornecido) :
File
excluirEmpty Directory
excluirNot Empty Directory
, chame delete novamente com o subdiretório, repita 1 a 3exemplo:
Para obter acesso ao Diretório de armazenamento externo, você precisa das seguintes permissões:
(Use
ContextCompat.checkSelfPermission
eActivityCompat.requestPermissions
)Método recursivo:
fonte
Eu coloquei este, embora seja um passo, ele apaga uma pasta com qualquer estrutura de diretório.
Espero que isto ajude.
fonte
aqui está sua solução, ela também atualizará a galeria.
fonte
Mais uma maneira (moderna) de resolvê-lo.
No Android desde a API 26
fonte
Estou usando esta função recursiva para fazer o trabalho:
A função verifica se é um diretório ou um arquivo.
Se for um diretório, verifica se há arquivos filho, se ele tiver arquivos filhos se chamará novamente passando os filhos e repetindo.
Se for um arquivo, exclua-o.
(Não use esta função para limpar o cache do aplicativo passando o diretório de cache, pois ele também excluirá o diretório de cache, para que o aplicativo falhe ... Se você deseja limpar o cache, use esta função que não excluirá o diretório dir você passa para ele:
ou você pode verificar se é o diretório do cache usando:
Exemplo de código para limpar o cache do aplicativo:
Tchau, tenha um bom dia e codificação: D
fonte