Exemplo de Tutorial de Armazenamento Interno no Android

Hoje vamos explorar o armazenamento interno do Android. O Android oferece algumas maneiras estruturadas de armazenar dados. Estas incluem

Neste tutorial, vamos explorar a gravação e leitura de dados em arquivos usando Armazenamento Interno do Android.

Armazenamento Interno do Android

O armazenamento interno do Android é o armazenamento dos 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 ao aplicativo 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 escrever em qualquer arquivo que desejarem.

Lendo e Escrevendo Arquivos 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 de FileOutputStream. 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 depois 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 simples de arquivo.

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, além de um botão de Gravar e um botão de Ler. Observe 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 gravação 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 aviso é exibido quando os dados são gravados com sucesso no armazenamento interno, e os dados são mostrados no próprio EditText ao ler o arquivo. A imagem abaixo é a saída do projeto. A imagem mostra texto sendo escrito no armazenamento interno e, ao clicar em Ler, exibe o texto no mesmo EditText.

Onde está localizado o arquivo?

Para 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, conforme mostrado abaixo: Faça o download do 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