实验五 简单存储与文件存储.docx
- 文档编号:23214088
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:21
- 大小:1.17MB
实验五 简单存储与文件存储.docx
《实验五 简单存储与文件存储.docx》由会员分享,可在线阅读,更多相关《实验五 简单存储与文件存储.docx(21页珍藏版)》请在冰豆网上搜索。
实验五简单存储与文件存储
步骤1.
DataStorageDemoActivity实现的是简单存储。
Android为开发人员提供了简单的数据存储方法SharePreferences。
这是一种轻量级的数据保存方式,通过SharePreferences开发人员可以将NVP保存在Android的文件系统中,而且SharePreferences完全屏蔽对文件系统的操作过程,开发人员仅是通过调用SharePreferences对NVP进行保存和读取。
(1)在使用SharePreferences前,先定义SharePreferences的访问模式,此处将SharePreferences的访问模式设定为既可以全局读,也可以全局写:
publicstaticintMODE=Context.MODE_WORLD_READABLE+
Context.MODE_WORLD_WRITEABLE;
(2)定义SharePreferences的名称,这个名称与在Android文件系统中保存的文件同名。
只要具有相同的NVP内容,都会保存在同一个文件中。
publicstaticfinalStringPREFERENCE_NAME=“SaveSetting”;
(3)为了使用SharePreferences,需要将访问模式和SharePreferences名称作为参数,传递到getSharePreferences()函数,并获取到SharePreferences对象。
SharedPreferencessharedPreferences=getSharePreferences(PREFERENCE_NAME,MODE);
(4)在获取到SharedPreferences对象后,通过SharedPreferences.Editor类对SharedPreferences进行修改,最后调用commit()函数保存修改内容。
SharedPreferences.Ediroreditor=sharePreferences.edit();
Emit();
整体过程参见课本P153SimplePreferencesDemos示例。
重要代码:
//利用SharedPreference加载NVP数据
privatevoidLoadSharedPreference()
{
SharedPreferencessharedPreferences=getSharedPreferences(PREFERENCE_NAME,MODE);
Stringname=sharedPreferences.getString("Name","Tom");
intage=sharedPreferences.getInt("Age",20);
floatheight=sharedPreferences.getFloat("Height",1.81f);
nameText.setText(name);
ageText.setText(String.valueOf(age));
heightText.setText(String.valueOf(height));
}
//利用SharedPreference保存NVP数据
privatevoidSaveSharedPreference()
{
SharedPreferencessharedPreferences=getSharedPreferences(PREFERENCE_NAME,MODE);
SharedPreferences.Editoreditor=sharedPreferences.edit();
editor.putString("Name",nameText.getText().toString());
editor.putInt("Age",Integer.parseInt(ageText.getText().toString()));
editor.putFloat("Height",Float.parseFloat(heightText.getText().toString()));
mit();
}
DataStorageDemoActivity在onStart()函数中调用LoadSharedPreference()函数,读取保存在SharedPreference中的姓名、年龄和身高信息,并显示在用户界面上。
当Activity关闭时,在onStop()函数调用SaveSharedPreference(),保存界面上的信息。
程序运行出来的截图如下:
此程序运行后,通过FileExplorer查看/data/data下的数据,android为每个应用程序建立了与包同名的目录,用来保存应用程序产生的数据。
SharedPreference文件就保存在/data/data/
shared_prefs目录下生成的名为SaveSetting.xml的文件,文件大小为170字节,在Linux下的权限为“—rw—rw—rw”,r表示可读,w表示可写。
截图如下:
自己重写的截图如下:
需要注意的是改变AndroidManifest.xml文件,选择其中一个Activity有效启动。
这个修改代码如下:
步骤2.
InternalFileDemo实现的是文件存储,内部存储。
Android系统允许应用程序仅能够自身访问的私有文件,文件保存在设备的内部存储器上。
(1)首先定义建立文件的名称fileDemo.txt
(2)openFileOutput()函数为写入数据做准备而打开的应用程序私文件,如果指定文件不存在,则创建一个新的文件。
调用write()函数将数据写入文件,调用flush()函数将所有剩余的数据写入文件,并调用close()函数关闭FileOutputStream。
为了提高文件系统的性能,一般调用write()函数时,如果写入的数据量较小,系统会把数据保存在数据缓冲区中,等数据积累到一定程度时再一次性的写入文件中。
因此,在调用close()函数关闭文件前,务必要调用flush()函数,将缓冲区内所有的数据写入文件。
代码如下:
StringFILE_NAME=”fileDemo.txt”;
FileOutputStreamfos=openFileOutput(FILE_NAME,Context.MODE_PRIVATE);
Stringtext=“somedata”;
fos.write(text.getByte());
fos.flush();
fos.close();
(3)openFileInput()函数为读取数据做准备而打开的应用程序私文件。
使用openFileInput()函数打开已有文件的代码如下:
StringFILE_NAME=”fileDemo.txt”;
FileInputStreamfis=openFileInput(FILE_NAME);
Byte[]readBytes=newbyte[fis.available()];
While(fis.read(readBytes)!
=-1){}
此处代码应该使用try/catch捕获可能发生的异常。
(4)追加模式如果用户选择“追加模式”,数据将会添加到fileDemo.txt文件的结尾处。
通过“读取文件”按钮,程序会自动读取fileDemo.txt文件的内容,并显示
在界面下方的区域。
具体代码见课本P158InternalFileDemo示例。
主要代码如下:
writeButton.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
try{
if(checkBox.isChecked())
mode=Context.MODE_APPEND;
else
mode=Context.MODE_PRIVATE;
Stringtext=editText.getText().toString();
FileOutputStreamfos=openFileOutput(fileName,mode);
fos.write(text.getBytes());
fos.flush();
fos.close();
textView01.setText("文件写入成功,文件长度:
"+text.length());
textView02.setText("");
}catch(FileNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
});
readButton.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
try{
FileInputStreamfis=openFileInput(fileName);
if(fis.available()>0)
{
bytereadBytes[]=newbyte[fis.available()];
fis.read(readBytes);
Stringtext=newString(readBytes);
textView01.setText("文件读取成功,文件长度:
"+text.length());
textView02.setText(text);
}
}catch(FileNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
});
}
AndroidManifest.xml文件代码截图如下:
截图如下:
追加模式截图如下:
文件截图:
步骤3.
sdcardDemo利用Java.io.File及OutputStream实现SD卡文件存取。
Android的外部存储设备指的是SD卡。
是一种广泛使用于数码设备上的记忆卡,虽然并不是所有的Android手机都有SD卡,但Android系统提供了对SD卡的便捷的访问方法。
Android模拟器支持SD卡,但模拟器中没有默认的SD卡,开发人员必须在模拟器中手工添加SD卡的映像文件。
使用
Mksdcard-1SDCARD256ME:
\android\sdcard_file
用户首先通过“生成随机数列”按钮生成随机小数,然后通过“写入SD卡”按钮将生成的数据保存在SD卡的目录下。
参见课本P161SDcardFileDemo示例。
代码如下:
publicclasssdcardDemoextendsActivity{
privatestaticStringRandomNumberString="";
@Override
protectedvoidonCreate(BundlesavedInstanceState){
//TODOAuto-generatedmethodstub
super.onCreate(savedInstanceState);
setContentView(R.layout.sdcarddemo);
finalTextViewtextView01=(TextView)findViewById(R.id.sdcardtextView01);
finalTextViewtextView02=(TextView)findViewById(R.id.sdcardtextView02);
Buttonbutton1=(Button)findViewById(R.id.sdcardbutton01);
Buttonbutton2=(Button)findViewById(R.id.sdcardbutton02);
button1.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
RandomNumberString=String.valueOf(Math.random());
textView02.setText(RandomNumberString);
}
});
button2.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
StringFileName="SdCardFile"+System.currentTimeMillis()+".txt";
Filedir=newFile("/mnt/sdcard/");
if(dir.exists()&&dir.canWrite())
{
FilenewFile=newFile(dir.getAbsoluteFile()+"/"+FileName);
try{
newFile.createNewFile();
if(newFile.exists()&&newFile.canWrite())
{
FileOutputStreamfos=newFileOutputStream(newFile);
fos.write(RandomNumberString.getBytes());
fos.flush();
fos.close();
textView01.setText(FileName+"文件写入SD卡");
}
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
});
}
@Override
protectedvoidonDestroy(){
//TODOAuto-generatedmethodstub
super.onDestroy();
}
@Override
protectedvoidonRestart(){
//TODOAuto-generatedmethodstub
super.onRestart();
}
}
AndroidManifest.xml文件代码截图如下:
结果截图如下:
随机生成小数:
将随机生成小数写入SD卡:
步骤4.
ResourceFileDemo利用Java.io.File及OutputStream实现SD卡文件存取。
程序开发人员除了可以在内部存储设备和外部存储设备上使用文件外,还可以将程序开发阶段已经准备好的原始格式文件和XML文件分别存放在/res/raw和/res/xml目录下,供应程序在运行时进行访问。
主要代码如下:
button1.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
try{
InputStreaminputStream=resource.openRawResource(R.raw.raw_file);
byte[]reader=newbyte[inputStream.available()];
while(inputStream.read(reader)!
=-1)
{
}
textView02.setText(newString(reader,"utf-8"));
inputStream.close();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
});
button2.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
XmlPullParserparser=resource.getXml(R.xml.people);
Stringmsg="";
try{
while(parser.next()!
=XmlPullParser.END_DOCUMENT){
Stringpeople=parser.getName();
Stringname=null;
Stringage=null;
Stringheight=null;
if(people!
=null&&people.equals("person"))
{
intcount=parser.getAttributeCount();
for(inti=0;i { StringattrName=parser.getAttributeName(i); StringattrValue=parser.getAttributeValue(i); if(attrName! =null&&attrName.equals("name")) { name=attrValue; } elseif(attrName! =null&&attrName.equals("age")) { age=attrValue; } elseif(attrName! =null&&attrName.equals("height")) { height=attrValue; } } } if(name! =null&&age! =null&&height! =null) { msg+="姓名: "+name+"年龄: "+age+"身高: "+height+"\n"; } } }catch(XmlPullParserExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } textView02.setText(msg); } }); button3.setOnClickListener(newView.OnClickListener(){ @Override publicvoidonClick(Viewv){ //TODOAuto-generatedmethodstub Stringmsg=""; textView02.setText(msg); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验五 简单存储与文件存储 实验 简单 存储 文件