Hoje vamos explorar o armazenamento interno do Android. O Android oferece algumas maneiras estruturadas de armazenar dados. Estas incluem
- Preferências Compartilhadas
- Armazenamento Interno
- Armazenamento Externo
- Armazenamento SQLite
- Armazenamento via Conexão de Rede (na nuvem)
Neste tutorial, vamos abordar como salvar e ler dados em arquivos usando Armazenamento Interno do Android.
Armazenamento Interno do Android
O armazenamento interno do Android é o armazenamento de dados privados na memória do dispositivo. Por padrão, salvar e carregar arquivos no armazenamento interno é privado para o aplicativo, e outros aplicativos não terão acesso a esses arquivos. Quando o usuário desinstala o aplicativo, os arquivos armazenados internamente associados a ele também são removidos. No entanto, observe que alguns usuários root seus telefones Android, obtendo acesso de superusuário. Esses usuários poderão ler e gravar em qualquer arquivo que desejarem.
Lendo e Escrevendo Arquivo de Texto no Armazenamento Interno do Android
O Android oferece openFileInput
e openFileOutput
das classes Java I/O para modificar fluxos de leitura e escrita de e para arquivos locais.
-
openFileOutput(): Este método é usado para criar e salvar um arquivo. Sua sintaxe é dada abaixo:
FileOutputStream fOut = openFileOutput("nome do arquivo",Context.MODE_PRIVATE);
O método
openFileOutput()
retorna uma instância deFileOutputStream
. Depois disso, podemos chamar o método write para escrever dados no arquivo. Sua sintaxe é dada abaixo:String str = "dados de teste"; fOut.write(str.getBytes()); fOut.close();
-
openFileInput(): Este método é usado para abrir um arquivo e lê-lo. Ele retorna uma instância de FileInputStream. Sua sintaxe é dada abaixo:
FileInputStream fin = openFileInput(file);
Depois disso, chamamos o método read para ler um caractere por vez do arquivo e então imprimi-lo. Sua sintaxe é dada abaixo:
int c; String temp=""; while( (c = fin.read()) != -1){ temp = temp + Character.toString((char)c); } fin.close();
No código acima, a string temp contém todos os dados do arquivo.
-
Observe que esses métodos não aceitam caminhos de arquivo (por exemplo, caminho/para/arquivo.txt), eles apenas aceitam nomes de arquivo simples.
Estrutura do Projeto de Armazenamento Interno do Android
Código de Exemplo para Armazenamento Interno no Android
O layout XML contém um EditText
para escrever dados no arquivo e botões de Escrever e Ler. Note que os métodos onClick
são definidos apenas no arquivo XML, conforme mostrado abaixo: activity_main.xml
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:padding="5dp"
android:text="Android Read and Write Text from/to a File"
android:textStyle="bold"
android:textSize="28sp" />
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView1"
android:layout_marginTop="22dp"
android:minLines="5"
android:layout_margin="5dp">
<requestFocus />
</EditText>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Write Text into File"
android:onClick="WriteBtn"
android:layout_alignTop="@+id/button2"
android:layout_alignRight="@+id/editText1"
android:layout_alignEnd="@+id/editText1" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Read Text From file"
android:onClick="ReadBtn"
android:layout_centerVertical="true"
android:layout_alignLeft="@+id/editText1"
android:layout_alignStart="@+id/editText1" />
</RelativeLayout>
O MainActivity
contém a implementação da leitura e escrita em arquivos, como explicado anteriormente.
package com.journaldev.internalstorage;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class MainActivity extends Activity {
EditText textmsg;
static final int READ_BLOCK_SIZE = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textmsg=(EditText)findViewById(R.id.editText1);
}
// escrever texto no arquivo
public void WriteBtn(View v) {
// adicionar e escrever texto no arquivo
try {
FileOutputStream fileout=openFileOutput("mytextfile.txt", MODE_PRIVATE);
OutputStreamWriter outputWriter=new OutputStreamWriter(fileout);
outputWriter.write(textmsg.getText().toString());
outputWriter.close();
// exibir mensagem de arquivo salvo
Toast.makeText(getBaseContext(), "File saved successfully!",
Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
}
// ler texto do arquivo
public void ReadBtn(View v) {
// ler texto do arquivo
try {
FileInputStream fileIn=openFileInput("mytextfile.txt");
InputStreamReader InputRead= new InputStreamReader(fileIn);
char[] inputBuffer= new char[READ_BLOCK_SIZE];
String s="";
int charRead;
while ((charRead=InputRead.read(inputBuffer))>0) {
// conversão de char para string
String readstring=String.copyValueOf(inputBuffer,0,charRead);
s +=readstring;
}
InputRead.close();
textmsg.setText(s);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Aqui, um toast é exibido quando os dados são escritos com sucesso no armazenamento interno, e os dados são exibidos no próprio EditText ao ler os dados do arquivo. A imagem abaixo mostra a saída do projeto. A imagem representa o texto sendo escrito no armazenamento interno e, ao clicar em Ler, exibe o texto de volta no mesmo EditText.
Onde está localizado o arquivo?
Para realmente visualizar o arquivo, abra o Monitor de Dispositivos Android em Ferramentas->Android->Monitor de Dispositivos Android. O arquivo está presente na pasta data->data->{nome do pacote}->arquivos, conforme mostrado nas imagens abaixo: O arquivo “mytextfile.txt” é encontrado no nome do pacote do projeto, ou seja, com.journaldev.internalstorage, como mostrado abaixo:
Baixe o projeto final para exemplo de armazenamento interno do Android no link abaixo.
Baixar Projeto de Exemplo de Armazenamento Interno do Android
Source:
https://www.digitalocean.com/community/tutorials/android-internal-storage-example-tutorial