הדוגמה של אחסון פנימי של אנדרואיד

היום נבחן את אחסון המידע הפנימי של Android. Android מציעה מספר דרכים מובנות ל־\texttt{אחסון נתונים}. אלו כוללים \texttt{

. במדריך זה, אנו הולכים לבדוק כיצד לשמור ולקרוא נתונים לקבצים באמצעות \texttt{אחסון המידע הפנימי של Android}.

אחסון המידע הפנימי של Android

אחסון המידע הפנימי של Android הוא האחסון של הנתונים הפרטיים בזכרון התקן. כברירת מחדל, השמירה והטעינה של קבצים לאחסון הפנימי פרטיים לאפליקציה ואף לאפליקציות אחרות לא יהיו להם גישה אל קבצים אלו. כאשר המשתמש מסיר את האפליקציה, הקבצים המאוחסנים פנימית הקשורים לאפליקציה גם יוסרו. עם זאת, שימו לב שחלק מהמשתמשים משגרירים את טלפוני Android שלהם, ומרכיבים לעצמם גישה כמשתמשים ראשיים. משתמשים אלו יכולים לקרוא ולכתוב לקבצים כלשהם שיבחרו.

קריאה וכתיבה לקובץ טקסט באחסון הפנימי של Android

Android מציע את openFileInput ו־openFileOutput מתוך קבוצת המחלקות של Java I/O כדי לשנות קריאה וכתיבה של נתונים מקובץ ואל קובץ מקומי.

  • openFileOutput(): שיטה זו משמשת ליצירה ושמירה של קובץ. התחביר שלה ניתן למצוא למטה:

    FileOutputStream fOut = openFileOutput("שם קובץ", Context.MODE_PRIVATE);
    

    שיטת openFileOutput() מחזירה מופע של FileOutputStream. לאחר מכן, נוכל לקרוא לשיטת הכתיבה כדי לכתוב נתונים לקובץ. התחביר שלה ניתן למצוא למטה:

    String str = "נתוני מבחן";
    fOut.write(str.getBytes());
    fOut.close();
    
  • openFileInput(): שיטה זו משמשת לפתיחת קובץ וקריאתו. היא מחזירה מופע של FileInputStream. התחביר שלה ניתן להלן:

    FileInputStream fin = openFileInput(file);
    

    לאחר מכן, אנו קוראים את שיטת הקריאה כדי לקרוא תו אחד בכל פעם מהקובץ ולאחר מכן להדפיס אותו. התחביר שלה ניתן להלן:

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

    בקוד לעיל, מחרוזת temp מכילה את כל הנתונים של הקובץ.

  • שימו לב ששיטות אלו לא מקבלות נתיבי קבצים (לדוגמה, path/to/file.txt), הן מקבלות רק שמות פשוטים של קבצים.

מבנה פרויקט אחסון פנימי של אנדרואיד

קוד דוגמה לאחסון פנימי ב-Android

תצוגת ה-XML מכילה EditText לכתיבת נתונים לקובץ וכפתורי כתיבה וקריאה. שימו לב ששיטות ה־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 בעצמו בעת קריאת הנתונים מהקובץ. התמונה שמוצגת למטה היא תוצאת הפרויקט. התמונה מתארת טקסט שנכתב לאחסון הפנימי ובלחיצה על כפתור הקריאה הטקסט מוצג שוב באותו EditText.

איפה הקובץ ממוקם?

כדי לראות את הקובץ בפועל, פתח את עוקב המכשיר של אנדרואיד מתוך כלים-> אנדרואיד-> עוקב מכשיר אנדרואיד. הקובץ נמצא בתיקייה data-> data-> {שם החבילה}-> קבצים כפי שמוצג בתמונות למטה: הקובץ "mytextfile.txt" נמצא בשם החבילה של הפרויקט כמו שמוצג למטה: com.journaldev.internalstorage כמו שמוצג למטה: הורד את הפרויקט הסופי עבור דוגמת אחסון פנימי של אנדרואיד מהקישור למטה.

הורד את פרויקט דוגמת אחסון הפנימי של אנדרואיד

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