< Android数据存储> 任务二 应用程序数据文件夹里的文件读写
:zh]Android中提供了两个方法用来打开应用程序的数据文件夹IO流。
1.FileInputStream openFileInput(String name):参数name表示某个文件名,该方法用于打开应用程序文件夹下name文件对应的输入流。
2.FileOutputStream openFileOutPut(String name,int mode):该方法用于打开应用程序的文件夹下name文件对应的输出流。
同时,Android中提供了如下方法用来对应用程序的文件夹进行操作。
1.getDir(String name,int mode):用于创建name对应的子目录。
2.File getFilesDir():获取绝对路径。
3.Stirng[] fileList():返回文件夹下所有文件。
4.deleteFile(String name):删除指定文件。
关于文件存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。
文件可用来存放大量数据,如文本、图片、音频等。
默认位置:/data/data/<包>/files/***.***。
public void write() { try { FileOutputStream outStream=this.openFileOutput("sict.txt",Context.MODE_WORLD_READABLE); outStream.write(text.getText().toString().getBytes()); outStream.close(); Toast.makeText(MyActivity.this,"Saved",Toast.LENGTH_LONG).show(); } catch (FileNotFoundException e) { return; } catch (IOException e){ return ; } }
openFileOutput()方法的第一参数用于指定文件名称,不能包含路径分隔符“/”,如果文件不存在,Android 会自动创建它。
创建的文件保存在/data/data/<package name>/files目录,如: /data/data/cn.itcast.action/files/itcast.txt ,依次选择Eclipse菜单“WindowàShow ViewàOther”,在对话窗口中展开android文件夹,选择下面的File Explorer视图,然后在File Explorer视图中展开/data/data/<package name>/files目录就可以看到该文件。
openFileOutput()方法的第二参数用于指定操作模式,有四种模式。
1.Context.MODE_PRIVATE = 0
2.Context.MODE_APPEND = 32768
3.Context.MODE_WORLD_READABLE = 1
4.Context.MODE_WORLD_WRITEABLE = 2
其中,Context.MODE_PRIVATE为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中,可以使用Context.MODE_APPEND。Context.MODE_APPEND模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。MODE_WORLD_READABLE表示当前文件可以被其他应用读取,MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
如果希望文件被其他应用读和写,可以传入: openFileOutput("itcast.txt",Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE); android有一套自己的安全模型,当应用程序(.apk)在安装时系统就会分配给他一个userid,当该应用要去访问其他资源比如文件的时候,就需要userid匹配。默认情况下,任何应用创建的文件,sharedpreferences,数据库都应该是私有的(位于/data/data/<package name>/files),其他程序无法访问。
除非在创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE ,只有这样其他程序才能正确访问。
二 、对于私有文件只能被创建该文件的应用访问,如果希望文件能被其他应用读和写,可以在创建文件时,指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE权限。
Activity还提供了getCacheDir()和getFilesDir()方法: getCacheDir()方法用于获取/data/data/<package name>/cache目录 getFilesDir()方法用于获取/data/data/<package name>/files目录。
public void read() { try { FileInputStream inStream=this.openFileInput("sict.txt"); ByteArrayOutputStream stream=new ByteArrayOutputStream(); byte[] buffer=new byte[1024]; int length=-1; while((length=inStream.read(buffer))!=-1) { stream.write(buffer,0,length); } stream.close(); inStream.close(); text.setText(stream.toString()); Toast.makeText(MyActivity.this,"Loaded",Toast.LENGTH_LONG).show(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e){ return ; } }
三 、文字填空题
(1 满分)
根据注释后的内容填写适当的代码
String FILE_NAME = "file.txt";——————————————————- //使用openFileOutput()函数以私有模式建立文件String text = “data”;fs.write(text.getBytes());fo.flush();fo.close(); ANSWER:FileOutputStream fo=openFileOutput(FILE_NAME, 0);
四、文字填空题 (1 满分)
根据注释后的内容填写适当的代码
String FILE_NAME = "file.txt";———————————————— //使用openFileInput()函数打开已有文件byte[] readBytes = new byte[fi.available()];while(fi.read(readBytes) != -1){} ANSWER:FileInputStream fi=openFileInput(FILE_NAME);
五、实战视频、代码
相关Java代码
/*** 向文件中写入内容*/try {FileOutputStream fileOutputStream =openFileOutput(FILE_NAME,0);if (et_write.getText().toString().trim().length()!=0){fileOutputStream.write(et_write.getText().toString().getBytes());}fileOutputStream.close();Toast.makeText(getApplicationContext(),"写入成功",Toast.LENGTH_SHORT).show();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}
/*** 读取文件中的内容* By auther CYJ 2018-01-22*/try {FileInputStream fileInputStream=openFileInput(FILE_NAME);ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();byte[] buffer=new byte[1024];int length=-1;while((length=fileInputStream.read(buffer))!=-1){byteArrayOutputStream.write(buffer,0,length);}byteArrayOutputStream.close();fileInputStream.close();et_read.setText(byteArrayOutputStream.toString());Toast.makeText(getApplicationContext(),"读取成功",Toast.LENGTH_SHORT).show();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}
六 源码链接
往期链接:<Android界面编程> 任务一 酱油诗词赏析
<Android界面编程> 任务二用户注册界面
<5 Android数据存储> 任务二 应用程序数据文件夹里的文件读写 , - X+Y - CSDN博客
< Android数据存储> 任务二 应用程序数据文件夹里的文件读写相关推荐
- 5 Android数据存储 任务二 应用程序数据文件夹里的文件读写 ,
Android中提供了两个方法用来打开应用程序的数据文件夹IO流. 1.FileInputStream openFileInput(String name):参数name表示某个文件名,该方法用于打开 ...
- 详解C盘Windows文件夹里重要文件的作用
详解C盘Windows文件夹里重要文件的作用 在整个Windows操作系统中,最重要的莫过于"Windows"文件夹,对电脑进行任何操作几乎都有关.了解这里对于掌握整个系统的运作有 ...
- 计算机中文件怎么移动,文件夹里的文件怎么随意拖动
Q1:文件夹里的文件无法拖动? Windows 7为了节约自定义视图对未知的记忆功能所消耗的资源,去掉了自定义排序的方式. Q2:电脑文件夹里的文件不能随意拖动是怎么回事呀? 你说的意思是不是想实现任 ...
- 文件夹里的文件怎么批量打印呢?
在整理文件资料时,不少人喜欢将一些比较有用的资料整理到一个文件夹下面,但是文件夹中的文件如果想要批量打印的话,需要先将文件夹发送给打印商家,文件夹不支持离线发送,而且很多平台也不支持文件夹的发送. 对 ...
- BAT批处理让文件夹里的文件单个或多个依次移动到另外一个文件夹
@echo off @echo off&setlocal enabledelayedexpansion ::设置一次移动多少个文件? set s=1::120为多少秒 for /f " ...
- 文件批量改名:如何将在不同文件夹里的文件统一命名并设置编号?
文件批量改名,文件太多了,可以将在不同文件夹里的文件进行导入,统一重命名成相同的文件名并设置单独编号?有什么什么快速的操作办法吗?今天就有小编来教教大家要如何进行操作. 首先我们要进入文件批量改名高手 ...
- 计算机文件夹不在桌面显示,为什么我的电脑桌面上的有个文件夹里的文件突然不见了呢...
为什么我的电脑桌面上的有个文件夹里的文件突然不见了呢以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 为什么我的电脑桌面上 ...
- Ubuntu桌面不显示Desktop里的文件(Ubuntu桌面显示的是home文件夹里的文件)怎么办
在整理桌面文件的时候,不知道进行了什么操作,导致Ubuntu重启后,桌面显示的是home文件夹里的文件,整个Desktop文件被拖到了回收站里,于是恢复桌面文件夹,但是恢复后重启原桌面文件也不会显示, ...
- 「整理文件轻松有妙招!教你如何按类型将文件夹里的文件进行归类保存」
文件整理是一个让人望而却步的任务,不经意间文件夹里就会产生大量分类不清的文件,让我们感到十分困扰.而现在,让我们为你介绍一种简便易行的方法,可将文件夹中的文件按类型进行归类保存,轻松整理你的文件夹! ...
最新文章
- Linux一键安装Lnmp
- 计算机文献双语外文,中英文双语计算机专业毕业设计外文文献翻译成品:对Delphi的概述.docx...
- bluetooth射频已关闭请打开bluetooth射频_希杰大功率射频放大器烧了维修诊断步骤...
- wpf 使子ui元素可视区域不超过父元素_对游戏UI设计的一点思考
- CYQ.Data 轻量数据层之路 V3.0版本发布-Xml绝对杀手(三十二)
- linux 建立ftp用户
- WPF 嵌入字体文件
- 【模版题】树状数组(单点修改+区间查询)
- 矩阵计算 动手学深度学习 pytorch
- java必背代码_java必背代码入门有哪些?如何写出优质代码?
- c语言程序学生档案管理系统,C语言 班级档案管理系统实现
- el-dialog可拖拽
- uniapp 安卓 长按app 快捷方式 shortcut
- Oracle+Sql Server相关查询语句
- H5无插件实现实时海康、大华摄像头网页预览
- SpringBoot集成EMail
- 2020投资入籍项目排名:圣基茨和尼维斯投资移民项目全球最快批复
- Leetcode 414. 第三大的数(详解 C语言实现)
- 芒果Tv服务器维护,芒果tv怎么看直播?芒果tv直播看不了怎么办?
- python 绘制对数坐标散点图