Android提供多种存储的应用程序存储自己的数据。存储的地点是共享的,内部和外部存储,SQLite存储,并通过网络连接存储。
在本章中,我们要看看在内部存储。内部存储是设备存储器上的专用数据的存储。
默认情况下,这些文件是私有并由唯一应用程序访问和删除,当用户删除应用程序。
写入文件
为了使用内部存储写入某些数据到文件中,调用openFileOutput()方法用的文件和模式的名称。该模式可以是 private , public,它的语法如下:
FileOutputStreamfOut=openFileOutput("file name here",MODE_WORLD_READABLE);
该方法openFileOutput()返回FileOutputStream的一个实例。因此收到FileInputStream对象。之后可以调用write方法写入文件数据。它的语法如下:
Stringstr="data";fOut.write(str.getBytes());fOut.close();
读取文件
为了从刚才创建的文件中读取数据,openFileOutput()方法使用文件的名称。它返回FileInputStream的一个实例。它的语法如下:
FileInputStreamfin=openFileInput(file);
在此之后,可以调用read方法来一次从文件读取一个字符,然后打印出来。它的语法如下:
intc;Stringtemp="";while((c=fin.read())!=-1){temp=temp+Character.toString((char)c);}//string temp contains all the data of the file.fin.close();
除了写入(write)和关闭(close)方法,对于更好写入文件所提供FileOutputStream类的其他方法。这些方法如下:
Sr.No
方法及说明
1
FileOutputStream(File file, boolean append)
这个方法构造一个新的FileOutputStream写入到文件。
2
getChannel()
此方法返回分享与当前流的位置上只写FileChannel
3
getFD()
这个方法返回底层文件描述符
4
write(byte[] buffer, int byteOffset, int byteCount)
这个方法从字节数组缓冲区写入字节计数开始位置偏移此流
除了用于良好的读取文件所提供的FileInputStreamclass读取和关闭,还有其它方法的方法。这些方法如下:
Sr.No
方法及说明
1
available()
此方法返回可以读取或跳过没有阻止更多的输入字节的估计数目
2
getChannel()
此方法返回分享与当前流的位置只读FileChannel
3
getFD()
这个方法返回底层文件描述符
4
read(byte[] buffer, int byteOffset, int byteCount)
此方法最多读取length字节,并将它们存储字节数组b中开始的偏移offset
例子
这里有一个例子演示如何使用内部存储来存储和读取文件。它创建了一个基本的存储应用程序,它可以从内部存储读取并写入。
为了试验这个例子,可以在实际设备或模拟器运行此。
步骤
描述
1
使用Android Studio创建Android应用程序,并将其命名为: Storage 。在创建这个项目,确保目标SDK编译在Android SDK的最新版本或使用更高级别的API
2
修改src/MainActivity.java文件中添加必要的代码
3
修改res/layout/activity_main 添加相应XML组件
4
修改res/values/string.xml 添加必要的字符串
5
运行应用程序并选择运行Android的设备,并在其上安装的应用和验证结果
以下是修改的主活动文件的内容 src/com.yiibai.storage/MainActivity.java.
packagecom.example.storage;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.InputStreamReader;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.Menu;importandroid.view.View;importandroid.widget.EditText;importandroid.widget.Toast;publicclassMainActivityextendsActivity{privateEditTextet;privateStringdata;privateStringfile="mydata";@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);et=(EditText)(findViewById(R.id.editText1));}publicvoidsave(Viewview){data=et.getText().toString();try{FileOutputStreamfOut=openFileOutput(file,MODE_WORLD_READABLE);fOut.write(data.getBytes());fOut.close();Toast.makeText(getBaseContext(),"file saved",Toast.LENGTH_SHORT).show();}catch(Exceptione){// TODO Auto-generated catch blocke.printStackTrace();}}publicvoidread(Viewview){try{FileInputStreamfin=openFileInput(file);intc;Stringtemp="";while((c=fin.read())!=-1){temp=temp+Character.toString((char)c);}et.setText(temp);Toast.makeText(getBaseContext(),"file read",Toast.LENGTH_SHORT).show();}catch(Exceptione){}}@OverridepublicbooleanonCreateOptionsMenu(Menumenu){// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main,menu);returntrue;}}
以下是XML修改res/layout/activity_main.xml. 的内容
以下是 res/values/string.xml. 的内容
<?xml version="1.0"encoding="utf-8"?>StorageSettingsHello world!save to intenal storageload from intenal storag
以下是 AndroidManifest.xml 的内容
让我们试着来运行刚刚修改的存储应用程序。安装程序在AVD并启动它,如果一切设置和应用程序都没有问题,它会显示以下仿真器窗口:
现在,需要做的是在字段中输入文本。举例来说:这里已经进入SOEM文本。按保存“save”按钮。以下通报会出现在AVD如下:
现在,当按下Load按钮,应用程序将读取该文件,并显示数据。如下面的数据将返回:
注意:可以通过切换到DDMS标签查看此文件。在DDMS选择文件浏览器和浏览这个路径。
data>data>com.example.storage>files>mydata
这也显示在下面图中:
¥ 我要打赏
纠错/补充
收藏
加QQ群啦,易百教程官方技术学习群
注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。