Neste tópico mostraremos como salvar dados
em um arquivo, dentro do espaço de armazenamento de um dispositivo celular.
O sistema Android usa um sistema de arquivos
que é semelhante aos sistemas de arquivos baseados em disco, em outras
plataformas. Um objeto File é
adequado para leitura ou escrita de grandes quantidades de dados em ordem de
início-fim, sem paralizações.
Todos os dispositivos Android têm duas áreas de
armazenamento de arquivos: armazenamento "interno" e
"externo". Estes nomes vêm desde o início da criação do Android,
quando a maioria dos dispositivos oferecidos possuíam memória não-volátil
(memória interna), além de um meio de armazenamento removível, como um cartão
micro SD (armazenamento externo).
Alguns dispositivos dividem o espaço de
armazenamento permanente em partições "internas" e "externas".
Então, mesmo sem um meio de armazenamento removível, há sempre dois espaços de
armazenamento, e o comportamento da API é o mesmo se o armazenamento externo é
removível ou não. As listas a seguir resumem os fatos sobre cada espaço de
armazenamento.
Armazenamento interno:
- Sempre está disponível.
- Arquivos salvos aqui são acessíveis apenas pelo seu aplicativo, por padrão.
- Quando o usuário desinstala um aplicativo, o sistema remove todos os arquivos do seu aplicativo do armazenamento interno.
Armazenamento externo:
- Não está sempre disponível, porque o usuário pode montar o armazenamentos externo como um armazenamento USB, e em alguns casos removê-lo do dispositivo Android.
- É amplamente legível, então arquivos salvos aqui podem ser lidos sem nossa permissão.
- Quando o usuário desinstala o aplicativo, o sistema remove os arquivos do aplicativo apenas se os salvarmos no diretório retornado por getExternalFilesDir().
Permissões para salvar e ler arquivos em um dispositivo Android
Para salvarmos arquivos em um dispositivo
Android, devemos declarar a permissão WRITE_EXTERNAL_STORAGE no arquivo AndroidManifest.xml.
Analogamente, para lermos dados de arquivos de
um dispositivo Android, devemos declarar a permissão READ_EXTERNAL_STORAGE, tal
qual é demonstrado abaixo.
Manipulando dados em um arquivo interno à um dispositivo Android
Para manipular dados em um arquivo, seja criando,
editando, ou deletando seu conteúdo, precisamos criar diversos métodos de
acesso a arquivos. Isto será demonstrado através de um robusto exemplo.
Este exemplo possuirá uma tela principal, e uma
classe com todos os métodos que interagem com arquivos. Abaixo temos a tela
principal.
Podemos ver que ela define uma instância da
classe FileUtils (que é a classe que
fará a interação com os arquivos), e que o método fileLog() é um método que salva uma String em um arquivo.
A classe que interage com os arquivos é mostrada
abaixo.
Acima podemos ver a pasta em que o arquivo será
salvo. Ela é obtida através do método Utils.getPackageName(Class<?>
clazz). Este método retorna o caminho do pacote da tela passada como parâmetro.
Para entende-la,
vamos dar uma olhada na classe Utils.java.
Neste caso, o retorno do método acima será “br.example.filemanager”. Logo, o comando abaixo retornará “/Android/data/br.example.filemanager/”: public static final String CACHE_DIR = "/Android/data/" +
Utils.getPackageName(MainActivity.class) + "/";
Seguindo nossa classe FileUtils, temos abaixo o método saveFile(), que possui uma lógica bem interessante. Nele,
inicialmente verificamos se o dispositivo de armazenamento está montado. Se ele
estiver, criamos o diretório descrito acima, e após isto, obtemos o caminho do
arquivo à ser manipulado.
Se este arquivo já existir, chamamos o método editFile(). Se ele não existir, chamamos
o método createFile().
Em seguida, temos o método que verifica se dispositivo
de armazenamento está montado.
E logo abaixo, um método que verifica se um
arquivo existe.
E abaixo, métodos que criam um diretório e um
arquivo.
Já o método readFile()
será usado pelo método editFile()
para atualizar o conteúdo de um arquivo.
E, finalmente, o método que chamamos diretamente
através da MainActivity.
E isto é tudo. Com este exemplo bem simples, que apenas escreve o texto “Printing into
a file...” em um arquivo de uma pasta dentro de um dispositivo Android, conseguimos
ilustrar toda a lógica envolta na criação e atualização de conteúdo de um
arquivo em Android.
-----
Caso alguém tenha uma dúvida, crítica ou sugestão, sinta-se à vontade.
Nenhum comentário:
Postar um comentário