Android学习笔记032之数据存储文件存储读取.docx

上传人:b****8 文档编号:27936345 上传时间:2023-07-06 格式:DOCX 页数:17 大小:36.70KB
下载 相关 举报
Android学习笔记032之数据存储文件存储读取.docx_第1页
第1页 / 共17页
Android学习笔记032之数据存储文件存储读取.docx_第2页
第2页 / 共17页
Android学习笔记032之数据存储文件存储读取.docx_第3页
第3页 / 共17页
Android学习笔记032之数据存储文件存储读取.docx_第4页
第4页 / 共17页
Android学习笔记032之数据存储文件存储读取.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

Android学习笔记032之数据存储文件存储读取.docx

《Android学习笔记032之数据存储文件存储读取.docx》由会员分享,可在线阅读,更多相关《Android学习笔记032之数据存储文件存储读取.docx(17页珍藏版)》请在冰豆网上搜索。

Android学习笔记032之数据存储文件存储读取.docx

Android学习笔记032之数据存储文件存储读取

Android学习笔记032之数据存储—文件存储读取

我们知道,在AndroidOS中,提供了五中数据存储方式,分别是:

ContentProvider存储、文件存储、SharedPreference存储、SQLite数据库存储、网络存储。

其中ContentProvider存储在我们介绍ContentProvider的时候已经介绍过了,现在我们学习其它的数据存储方式。

这一篇,我们介绍文件存储。

1、文件的操作模式

  我们在学Java的时候都知道,Java中的IO操作来进行文件的保存和读取,Android是基于Linux的,与Java不同的是Android在Context类中封装好了输入流和输出流的获取方法,分别是:

FileInputStreamopenFileInput(Stringname);FileOutputStream(Stringname,intmode),这两个方法第一个参数用于指定文件名,第二个参数指定打开文件的模式。

Android提供的文件模式有:

MODE_PRIVATE:

Android提供的默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容。

MODE_APPEND:

模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。

MODE_WORLD_READABLE:

表示当前文件可以被其他应用读取;

MODE_WORLD_WRITEABLE:

表示当前文件可以被其他应用写入。

此外,Android还提供了其它几个重要的文件操作的方法:

getDir(Stringname,intmode):

在应用程序的数据文件夹下获取或者创建name对应的子目录

FilegetFilesDir():

获取app的data目录下的绝对路径

String[]fileList():

返回app的data目录下数的全部文件

deleteFile(StringfileName):

删除app的data目录下的指定文件

2、读写文件

  Android的读写文件和Java一样,也是一样通过IO操作实现,下面我们通过一个简单的例子走一下这个流程:

布局文件代码:

xmlversion="1.0"encoding="utf-8"?

>

android="

android:

layout_width="match_parent"

android:

layout_height="match_parent"

android:

orientation="vertical"

android:

padding="16dp">

android:

id="@+id/ed_file_save"

android:

layout_width="match_parent"

android:

layout_height="wrap_content"/>

android:

id="@+id/btn_file_save"

android:

layout_width="match_parent"

android:

layout_height="wrap_content"

android:

layout_marginTop="10dp"

android:

text="保存内容"/>

android:

id="@+id/btn_file_read"

android:

layout_width="match_parent"

android:

layout_height="wrap_content"

android:

layout_marginTop="10dp"

android:

text="读取内容"/>

android:

id="@+id/tv_read_file"

android:

layout_width="match_parent"

android:

layout_height="wrap_content"

android:

layout_marginTop="10dp"

android:

textColor="#000"

android:

textSize="14sp"/>

Activity代码:

packagecom.example.datasave;

importandroid.content.Context;

importandroid.os.Bundle;

importandroid.support.annotation.Nullable;

importandroid.support.v7.app.AppCompatActivity;

importandroid.view.View;

importandroid.widget.Button;

importandroid.widget.EditText;

importandroid.widget.TextView;

importjava.io.FileInputStream;

importjava.io.FileOutputStream;

importjava.io.IOException;

/**

*CreatedbyDevinon2016/7/19.

*/

publicclassFileDataActivityextendsAppCompatActivity{

privateEditTexted_file_save;

privateButtonbtn_file_save;

privateButtonbtn_file_read;

privateTextViewtv_read_file;

privateStringfileName="hello.txt";

@Override

protectedvoidonCreate(@NullableBundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_file);

ed_file_save=(EditText)findViewById(R.id.ed_file_save);

btn_file_save=(Button)findViewById(R.id.btn_file_save);

btn_file_read=(Button)findViewById(R.id.btn_file_read);

tv_read_file=(TextView)findViewById(R.id.tv_read_file);

btn_file_save.setOnClickListener(newView.OnClickListener(){

@Override

publicvoidonClick(Viewview){

StringfileContent=ed_file_save.getText().toString();

try{

save(fileContent);

ToastUtils.showToast(FileDataActivity.this,"文件写入成功");

}catch(Exceptione){

e.printStackTrace();

ToastUtils.showToast(FileDataActivity.this,"文件写入失败");

}

}

});

btn_file_read.setOnClickListener(newView.OnClickListener(){

@Override

publicvoidonClick(Viewview){

try{

Stringcontent=read();

tv_read_file.setText("文件的内容是:

"+content);

}catch(IOExceptione){

e.printStackTrace();

ToastUtils.showToast(FileDataActivity.this,"读取文件失败!

");

}

}

});

}

publicvoidsave(StringfileContent)throwsException{

FileOutputStreamoutput=this.openFileOutput(fileName,Context.MODE_PRIVATE);

output.write(fileContent.getBytes());

output.close();

}

publicStringread()throwsIOException{

//打开文件输入流

FileInputStreaminput=this.openFileInput(fileName);

byte[]temp=newbyte[1024];

StringBufferstringBuffer=newStringBuffer("");

intlen=0;

while((len=input.read(temp))>0){

stringBuffer.append(newString(temp,0,len));

}

//关闭输入流

input.close();

returnstringBuffer.toString();

}

}

最后是实现效果图:

这里文件使用的模式是私有模式,只能本应用读取还会覆盖原文件,这样就可以实现简单的文件读写。

3、读写SDcard的文件

读写SDCard需要权限:

name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

name="android.permission.WRITE_EXTERNAL_STORAGE"/>

对设备读写SDCard的时候需要判断SDCard是否存在,很多手机是不存在SDcard的,下面我们对SDCard的读写中会有体现,下面我们一起通过例子实现SDCard的读写操作

首先是布局文件代码:

android:

id="@+id/ed_file_save_sd"

android:

layout_width="match_parent"

android:

layout_height="wrap_content"

android:

layout_marginTop="20dp"/>

android:

id="@+id/btn_file_save_sd"

android:

layout_width="match_parent"

android:

layout_height="wrap_content"

android:

layout_marginTop="10dp"

android:

text="写入到SDcard"/>

android:

id="@+id/btn_file_read_sd"

android:

layout_width="match_parent"

android:

layout_height="wrap_content"

android:

layout_marginTop="10dp"

android:

text="从SDcard读取"/>

android:

id="@+id/tv_read_file_sd"

android:

layout_width="match_parent"

android:

layout_height="wrap_content"

android:

layout_marginTop="10dp"

android:

textColor="#000"

android:

textSize="14sp"/>

Activity代码:

ed_file_save_sd=(EditText)findViewById(R.id.ed_file_save_sd);

tv_read_file_sd=(TextView)findViewById(R.id.tv_read_file_sd);

btn_file_read_sd=(Button)findViewById(R.id.btn_file_read_sd);

btn_file_read_sd.setOnClickListener(newView.OnClickListener(){

@Override

publicvoidonClick(Viewview){

try{

Stringcontent=readFromSD();

tv_read_file_sd.setText("从SDCard读取到的内容是:

"+content);

}catch(Exceptione){

e.printStackTrace();

ToastUtils.showToast(FileDataActivity.this,"读取文件失败!

");

}

}

});

btn_file_save_sd=(Button)findViewById(R.id.btn_file_save_sd);

btn_file_save_sd.setOnClickListener(newView.OnClickListener(){

@Override

publicvoidonClick(Viewview){

Stringcontent=ed_file_save_sd.getText().toString();

try{

save2SDCard(content);

ToastUtils.showToast(FileDataActivity.this,"文件写入SDCard成功");

}catch(Exceptione){

e.printStackTrace();

ToastUtils.showToast(FileDataActivity.this,"文件写入SDCard失败");

}

}

});

publicvoidsave2SDCard(Stringcontent)throwsException{

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//如果sdcard存在

StringfileName3=Environment.getExternalStorageDirectory().getCanonicalPath()+File.separator+"test"+File.separator+fileName2;

Filefile=newFile(fileName3);

if(!

file.getParentFile().exists()){

file.getParentFile().mkdir();

}

FileOutputStreamfileOutputStream=newFileOutputStream(file);

fileOutputStream.write(content.getBytes());

fileOutputStream.close();

}else{

ToastUtils.showToast(this,"SDCard不存在");

}

}

publicStringreadFromSD()throwsException{

StringBufferstringBuffer=newStringBuffer("");

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){

StringfileName3=Environment.getExternalStorageDirectory().getCanonicalPath()+File.separator+"test"+File.separator+fileName2;

Filefile=newFe(fileName3);

if(!

file.getParentFile().exists()){

file.getParentFile().mkdir();

}

FileInputStreamfileInputStream=newFileInputStream(file);

byte[]temp=newbyte[1024];

intlen=0;

while((len=fileInputStream.read(temp))>0){

stringBuffer.append(newString(temp,0,len));

}

fileInputStream.close();

}else{

ToastUtils.showToast(this,"SDCard不存在");

}

returnstringBuffer.toString();

}

SDCard的读取和文件操作差不多,需要判断SDCard是否存在,最后是效果图:

4、读取raw和assets文件的数据

  raw/res中的文件会被映射到Android的R文件中,我们直接通过R文件就可以访问,这里就不在过多介绍了。

  assets中的文件不会像raw/res中的文件一样被映射到R文件中,可以有目录结构,Android提供了一个访问assets文件的AssetManager对象,我们访问也很简单:

AssetManagerassetsManager=getAssets();

InputStreaminputStream=assetsManager.open("fileName");

这样就可以直接获取到assets目录下的资源文件。

AndroidOS的文件存储就简单介绍到这里,下一篇我们介绍SharedPreference存储方法,下面提供一些文件存储的工具方法:

packagecom.example.datasave.io;

importandroid.content.Context;

importjava.io.BufferedReader;

importjava.io.BufferedWriter;

importjava.io.ByteArrayOutputStream;

importjava.io.FileInputStream;

importjava.io.FileNotFoundException;

importjava.io.FileOutputStream;

importjava.io.IOException;

importjava.io.InputStream;

importjava.io.InputStreamReader;

importjava.io.OutputStreamWriter;

/**

*IO流工具类

*很简单,仅支持文本操作

*/

publicclassIOUtils{

/**

*文本的写入操作

*

*@paramfilePath文件路径。

一定要加上文件名字

*例如:

../a/a.txt

*@paramcontent写入内容

*@paramappend是否追加

*/

publicstaticvoidwrite(StringfilePath,Stringcontent,booleanappend){

BufferedWriterbufw=null;

try{

bufw=newBufferedWriter(newOutputStreamWriter(

newFileOutputStream(filePath,append)));

bufw.write(content);

}catch(Exceptione1){

e1.printStackTrace();

}finally{

if(bufw!

=null){

try{

bufw.close();

}catch(IOExceptione){

e.printStackTrace();

}

}

}

}

/**

*文本的读取操作

*

*@parampath文件路径,一定要加上文件名字

*例如:

../a/a.txt

*@return

*/

publicstaticStringread(Stringpath){

BufferedReaderbufr=null;

try{

bufr=newBufferedReader(newInputStreamReader(

newFileInputStream(path)));

StringBuffersb=newStringBuffer();

Stringstr=ull;

while((str=bufr.readLine())!

=null){

sb.append(str);

}

returnsb.toString();

}catch(Exceptione){

e.printStackTrace();

}finally{

if(bufr!

=null){

try{

bufr.close();

}catch(IOExceptione){

e.printStackTrace();

}

}

}

returnnull;

}

/**

*文本的读取操作

*

*@paramis输入流

*@return

*/

publicstaticStringread(InputStreamis){

BufferedReaderbufr=null;

try{

bufr=newBufferedReader(newInputStreamReader(is));

Strin

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1