Android內部存儲示例教程

今天我們將研究 Android 內部儲存。Android 提供了一些結構化的方式來存儲數據。這些方式包括

在這個教程中,我們將探討如何使用Android 內部存儲將數據保存和讀取到文件中。

Android 內部存儲

Android 內部存儲是在設備內存上存儲私有數據。默認情況下,將文件保存到內部存儲並從中加載是應用程序私有的,其他應用程序將無法訪問這些文件。當用戶卸載應用程序時,與應用程序關聯的內部存儲文件也將被刪除。但是,請注意,一些用戶root他們的 Android 手機,獲得超級用戶訪問權限。這些用戶將能夠讀寫任何他們想要的文件。

在Android內部存儲中讀寫文本文件

Android提供了Java I/O類中的openFileInputopenFileOutput來修改從本地文件讀取和寫入流的功能。

  • openFileOutput(): 此方法用於創建並保存文件。其語法如下:

    FileOutputStream fOut = openFileOutput("文件名",Context.MODE_PRIVATE);
    

    方法openFileOutput()返回一個FileOutputStream實例。然後我們可以調用write方法將數據寫入文件。其語法如下:

    String str = "測試數據";
    fOut.write(str.getBytes());
    fOut.close();
    
  • openFileInput(): 此方法用於打開文件並讀取其內容。它會返回一個 FileInputStream 的實例。其語法如下:

    FileInputStream fin = openFileInput(file);
    

    然後,我們調用 read 方法逐個字符地從文件中讀取並打印出來。其語法如下:

    int c;
    String temp="";
    while( (c = fin.read()) != -1){
       temp = temp + Character.toString((char)c);
    }
    
    fin.close();
    

    在上述代碼中,字符串 temp 包含了文件的所有數據。

  • 請注意,這些方法不接受文件路徑(例如 path/to/file.txt),它們只接受簡單的文件名。

Android 內部存儲結構項目

Android 內部存儲示例代碼

xml 布局包含一個 EditText 用於將數據寫入文件,以及一個 Write 按鈕和 Read 按鈕。請注意,onClick 方法僅在 xml 文件中定義,如下所示: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>

MainActivity 包含讀寫文件的實現,如上所述。

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);
    }

    // 將文本寫入文件
    public void WriteBtn(View v) {
        // 將文本添加到文件
        try {
            FileOutputStream fileout=openFileOutput("mytextfile.txt", MODE_PRIVATE);
            OutputStreamWriter outputWriter=new OutputStreamWriter(fileout);
            outputWriter.write(textmsg.getText().toString());
            outputWriter.close();

            // 顯示文件保存消息
            Toast.makeText(getBaseContext(), "File saved successfully!",
                    Toast.LENGTH_SHORT).show();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 從文件讀取文本
    public void ReadBtn(View v) {
        // 從文件讀取文本
        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) {
                // char 轉換為字符串
                String readstring=String.copyValueOf(inputBuffer,0,charRead);
                s +=readstring;
            }
            InputRead.close();
            textmsg.setText(s);
            

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

當數據成功寫入內部存儲時,將顯示一個提示,並且在從文件讀取數據時,數據將顯示在 EditText 中。下面顯示的圖像是項目的輸出。該圖像顯示了將文本寫入內部存儲,並在點擊 Read 按鈕時將文本顯示回相同的 EditText 中。

文件位於哪裡?

要查看文件,請從工具->Android->Android Device Monitor中打開Android設備監視器。 文件位於文件夾數據->數據->{包名}->文件中,如下圖所示: 文件“mytextfile.txt”位於項目的包名中,即com.journaldev.internalstorage,如下所示: 從以下鏈接下載android內部存儲示例的最終項目。

下載Android內部存儲示例項目

Source:
https://www.digitalocean.com/community/tutorials/android-internal-storage-example-tutorial