segunda-feira, 2 de dezembro de 2013

Arquivos

Olá à todos.

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