安卓内部存储示例教程

今天,我们来看看Android的内部存储。Android提供了几种结构化的方式来存储数据 。这些措施包括

在本教程中,我们将研究如何使用Android内部存储 将数据存入文件和读取数据。

Android内部存储

Android内部存储 是私有数据在设备内存上的存储。默认情况下,将文件保存和加载到内部存储是应用程序的私有内容,其他应用程序将无法访问这些文件。当用户卸载应用程序时,与该应用程序相关联的内部存储文件也会被删除。然而,请注意,一些用户** 根** 他们的Android手机,获得了超级用户访问权限。这些用户将能够读写他们想要的任何文件。

Android内存中文本文件的读写

Android提供了Java I/O类中的OpenFileInputOpenFileOutput来修改本地文件的读写流。

  • OpenFileOutput() :该方法用于创建和保存文件。其语法如下:
1FileOutputStream fout=OpenFileOutput()
2`方法`OpenFileOutput()`返回`FileOutputStream`的实例。之后,我们可以调用WRITE方法在文件上写入数据。其语法如下:`
3字符串str=`测试数据`
4FOut.write(str.getBytes())
  • OpenFileInput() :该方法用于打开并读取文件。它返回FileInputStream的一个实例。
  1FileInputStream fin=OpenFileInput(文件)
  2在此之后,我们调用Read方法从文件中一次读取一个字符,然后打印它。其语法如下:`
  3Intc
  4字符串temp=``;
  5While((c=fin.read())=-1){
  6Temp=temp+Character.toString((Char)c)
  7}
  8
  9Fin.lose()
 10在上面的代码中,字符串temp包含文件的所有数据
 11* 请注意,这些方法不接受文件路径(例如,Path/to/file.txt),它们只接受简单的文件名。
 12
 13# Android内部存储项目结构
 14
 15[![安卓内部存储示例,安卓文件storage](https://cdn.jsdelivr.net/gh/andsky/tutorials-images/spaces/2015/10/project-structure2-233x450.png)](https://journaldev.nyc3.digitaloceanspaces.com/2015/10/project-structure2.png)
 16
 17# Android内存示例代码
 18
 19XML布局包含一个用于将数据写入文件的`EditText`,以及一个写入按钮和读取按钮。请注意,仅在XML文件中定义了`onClick`方法,如下所示:`active_main.xml`
 20
 21```
 22<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
 23    xmlns:tools="https://schemas.android.com/tools"
 24    android:layout_width="match_parent"
 25    android:layout_height="match_parent"
 26    >
 27
 28    <TextView
 29        android:id="@+id/textView1"
 30        android:layout_width="wrap_content"
 31        android:layout_height="wrap_content"
 32        android:layout_alignParentLeft="true"
 33        android:layout_alignParentRight="true"
 34        android:padding="5dp"
 35        android:text="Android Read and Write Text from/to a File"
 36        android:textStyle="bold"
 37        android:textSize="28sp" />
 38
 39    <EditText
 40        android:id="@+id/editText1"
 41        android:layout_width="wrap_content"
 42        android:layout_height="wrap_content"
 43        android:layout_alignParentLeft="true"
 44        android:layout_alignParentRight="true"
 45        android:layout_below="@+id/textView1"
 46        android:layout_marginTop="22dp"
 47        android:minLines="5"
 48        android:layout_margin="5dp">
 49
 50        <requestFocus />
 51    </EditText>
 52
 53    <Button
 54        android:id="@+id/button1"
 55        android:layout_width="wrap_content"
 56        android:layout_height="wrap_content"
 57        android:text="Write Text into File"
 58        android:onClick="WriteBtn"
 59        android:layout_alignTop="@+id/button2"
 60        android:layout_alignRight="@+id/editText1"
 61        android:layout_alignEnd="@+id/editText1" />
 62
 63    <Button
 64        android:id="@+id/button2"
 65        android:layout_width="wrap_content"
 66        android:layout_height="wrap_content"
 67        android:text="Read Text From file"
 68        android:onClick="ReadBtn"
 69        android:layout_centerVertical="true"
 70        android:layout_alignLeft="@+id/editText1"
 71        android:layout_alignStart="@+id/editText1" />
 72
 73</RelativeLayout>
 74```
 75
 76如上所述,`MainActivity`包含文件读写的实现。
 77
 78```
 79package com.journaldev.internalstorage;
 80
 81import android.os.Bundle;
 82import android.app.Activity;
 83import android.view.View;
 84import android.widget.EditText;
 85import android.widget.Toast;
 86import java.io.FileInputStream;
 87import java.io.FileOutputStream;
 88import java.io.InputStreamReader;
 89import java.io.OutputStreamWriter;
 90
 91public class MainActivity extends Activity {
 92
 93    EditText textmsg;
 94    static final int READ_BLOCK_SIZE = 100;
 95    @Override
 96    protected void onCreate(Bundle savedInstanceState) {
 97        super.onCreate(savedInstanceState);
 98        setContentView(R.layout.activity_main);
 99
100        textmsg=(EditText)findViewById(R.id.editText1);
101    }
102
103    // write text to file
104    public void WriteBtn(View v) {
105        // add-write text into file
106        try {
107            FileOutputStream fileout=openFileOutput("mytextfile.txt", MODE_PRIVATE);
108            OutputStreamWriter outputWriter=new OutputStreamWriter(fileout);
109            outputWriter.write(textmsg.getText().toString());
110            outputWriter.close();
111
112            //display file saved message
113            Toast.makeText(getBaseContext(), "File saved successfully!",
114                    Toast.LENGTH_SHORT).show();
115
116        } catch (Exception e) {
117            e.printStackTrace();
118        }
119    }
120
121    // Read text from file
122    public void ReadBtn(View v) {
123        //reading text from file
124        try {
125            FileInputStream fileIn=openFileInput("mytextfile.txt");
126            InputStreamReader InputRead= new InputStreamReader(fileIn);
127
128            char[] inputBuffer= new char[READ_BLOCK_SIZE];
129            String s="";
130            int charRead;
131
132            while ((charRead=InputRead.read(inputBuffer))>0) {
133                // char to string conversion
134                String readstring=String.copyValueOf(inputBuffer,0,charRead);
135                s +=readstring;
136            }
137            InputRead.close();
138            textmsg.setText(s);
139
140        } catch (Exception e) {
141            e.printStackTrace();
142        }
143    }
144}
145```
146
147在这里,当数据成功写入内部存储器时显示祝酒词,并且从文件读取数据时数据显示在EditText本身中。下面显示的图像是该项目的输出。该图像描述了写入内部存储的文本,在单击Read时,它将在相同的EditText中显示回文本[![安卓内部存储、安卓文件存储、安卓OpenFileOutput](https://cdn.jsdelivr.net/gh/andsky/tutorials-images/spaces/2015/10/android-internal-storage-example.gif)](https://cdn.jsdelivr.net/gh/andsky/tutorials-images/spaces/2015/10/android-internal-storage-example.gif)
148
149# 文件在哪里?
150
151要真正查看该文件,请从工具->Android->Android设备监视器打开Android设备监视器。文件位于Data->Data->{包名}->文件中,如下图所示:[![android文件存储,内部存储,android OpenFileOutput](https://cdn.jsdelivr.net/gh/andsky/tutorials-images/spaces/2015/10/screenshot-adm-450x253.png)](https://journaldev.nyc3.digitaloceanspaces.com/2015/10/screenshot-adm.png)在项目的包名中找到文件myextfile.txt,即**com.Journal aldev.intralstore** 如下图所示:[![android文件存储,内部存储,安卓OpenFileOutput](https://cdn.jsdelivr.net/gh/andsky/tutorials-images/spaces/2015/10/screenshot-adm2-450x202.png)](https://journaldev.nyc3.digitaloceanspaces.com/2015/10/screenshot-adm2.png)从下面的链接下载**安卓内部存储示例** 的最终方案。
152
153[下载安卓内部存储示例Project](https://journaldev.nyc3.digitaloceanspaces.com/android/InternalStorage.zip)
Published At
Categories with 技术
Tagged with
comments powered by Disqus