安卓内储文件类操作实例讲解

作者:创世魂

 

● 辅助说明

注意:从安卓10(API29)开始(安卓11彻底禁止),谷歌针对安卓文件系统进行了大修改,逐渐开始禁止软件操作存储卡目录。

其目的是为了规范软件本身文件管理,防止软件滥用文件创建功能和软件隐私保护,防止被第三方不法软件获取软件数据。

所有软件只能操作私有数据目录,对私有目录内容进行读写。

在火山中即使用“取内部私有数据目录()”“取外部私有数据子目录()”,取出操作目录来进行文件读写操作。

 

● 准备一个界面

 

界面如下图:

打开窗口设计器,放两个“按钮”,分别起名“按钮1”“按钮2”

最后在放一个“编辑框1”其组件宽度类型设置为“匹配父组件宽度”

保存布局后,右键“按钮”,添加“按钮被单击事件接收方法”,添加完毕后如下图所示。

 

 

一、安卓内储文件类

 

● 本类说明

 

本类提供了,用户程序“私有目录和文件”的操作,这个私有目录是当前app的目录,其它app无法访问。

目录内可以存放一些“缓存文件”或者一些重要的“数据文件”

比如:“账号密码”等重要的数据,想要保存又不想被其它app看到,就可以使用本类操作。

私有目录大致结构如图所示。

“三个”类别:"私有数据文件子目录","私有缓存子目录"和"私有子目录"。

私有数据文件子目录:你可以在里面放app的账号密码一类的。

私有缓存子目录:假如app有加载网络图片的功能,那么那些图片下载后可以临时放到这个缓存子目录中。

私有子目录:你可以新建自定义目录,放你想要放的东西。

 

调用方式

本类是“全局类”,有两种调用方式,如下图。

第一:直接输入“方法名”

第二:“类名”“方法名”

注意:只有“全局类”才可以“直接输入方法名”调用。

 

 

● 打开内部私有数据文件写

 

帮助文档如下图:

可以看到有“两个”参数,和一个“文件输出流”的返回值。

如果指定参数“文件名”不存在,将自动创建该文件。

可以利用“文件输出流”对象,来进行“写文件”操作。

注意:“文件输出流”不使用后记着关闭。

 

代码编写如下图:

首先依然是指定“来源对象==按钮1”

随后定义一个类型为“文件输出流”的变量,设置参考。

利用“本方法”赋值给定义的“文件流”变量,参数随便输入一个“文件名”

随后利用文件流“写数据2”方法,写一串“字节数组”数据到文件内。

判断是否写入成功后,最后调用“关闭”方法,关闭“文件流”

 

运行效果如下图:

执行“按钮1”后提示“保存成功”

如何读取“数据”数据看“下一个方法”

 

 

● 打开内部私有数据文件读

 

帮助文档:

可以看到只有一个“文本参数”和一个“文件输入流”返回值。

本方法的作用是用来读取“打开内部私有数据文件写”写入的私有数据。

注意:不使用流对象后一定要关闭。

另外,参数只能填写纯粹的文件名,不能包含路径。

 

代码编写如下图:

我们只需要在原来代码的基础上“稍作修改”,就可以“读取私有数据”

“文件类”类型改为“文件输入流”,并且额外增加“三个变量”备用。

分别是:长整数变量,字节数组变量,状态类变量。


利用本方法打开指定“文件名”赋值给“文件流”变量。

随后利用“取内部私有数据文件路径”方法,取这个文件的“文件尺寸”,赋值给长整数变量。

然后利用这个“文件尺寸”“字节数组操作.创建()”方法,创建一个指定“成员数”的数组,并赋值给定义的“数组变量”

注意要进行“强转整数”操作。


随后,利用“文件流.读入数据2()”方法,将“字节数组”“状态对象”两个变量写入。

然后利用“字节数组到文本”方法,将“字节数组”变量填入,最后赋值给“编辑框”显示。

最后判断“状态对象”是否成功,然后关闭“文件流”

 

运行效果如下图:

可以看到“按钮1”被点击后,“打开内部私有数据文件写”保存的数据被成功取出。

 

 

● 打开内部私有子目录

 

帮助文档如下图:

可以看到有一个“文本参数”和一个“文件名类”的返回值,打开失败返回“空对象”

如果输入的“目录不存在”,则会“自动创建”

点击查看文件名类的具体操作。

 

代码编写如下图:

首先创建一个类型为“文件名类”的变量,设置参考。

随后利用本方法,随便打开一个子目录,并且赋值给定义“文件变量”

最后我们就可以利用“取文件名()”方法,将整个私有子目录的完整路径取出。

 

运行效果如下图:

执行“按钮1”后,“编辑框1”内就会显示如下内容。

中间有一段文本是你的“程序包名”,包名后面的是“私有数据子目录”,我们可以看到自动添加了一个“app_”开头的标识。

 

● 取内部私有缓存目录

 

帮助文档如下图:

可以看到只有一个“文件名类”的返回值。

顾名思义,就是取出“私有缓存目录”,这个目录内可以放程序的一些“临时文件”

注意:本目录的内容,可能随时面临被系统删除的风险,建议开发app的时候,设置一个合理的容量,超过这个容量后就自行删除。

也可以给app设置一个“清理缓存”的功能,缓存超过一定容量后提醒“软件用户”清理。

 

代码如下图:

依然是创建一个类型为“文件名类”的变量,设置参考。

随后用“本方法”赋值给定义的“文件变量”

最后用“取文件名”方法取出,赋值给“编辑框1”显示。

 

运行效果如下图:

执行“按钮1”后,就可以看到“编辑框1”显示了完整的缓存路径,最后的“cache”就是缓存目录的名称。

 

● 取内部私有数据目录

 

帮助文档如下图:

可以看到本方法和“取内部私有缓存目录”一样,只有一个“文件名类”返回值。

顾名思义,就是“取出私有数据目录”的完整路径。

 

代码编写如下图:

直接照搬“取内部私有缓存目录”代码,方法名改成“取内部私有数据目录”即可。

最后依然是赋值给“编辑框1”显示。

 

运行效果如下图:

点击“按钮1”后,编辑框1就会显示完整的“私有数据目录”

“files”就是私有数据目录的名称。

 

● 取内部私有数据文件列表

 

帮助文档如下图:

注意,本方法是“取私有数据文件”“文件名”数组,并不是“文件目录”数组。

 

代码编写:

定义一个类型为“文本型[]”“文本数组”变量。

然后定义一个类型为“整数”“循环变量”

用本方法取出来数组列表,赋值给定义的“文本数组”

然后可以利用“循环”语句,将数组内的成员取出。

最后在“循环语句”内利用“编辑框1.添加内容”方法,将取出的成员添加到“编辑框”显示出来。

 

运行效果图(GIF):

文档最开始的时候我们用“打开内部私有数据文件写”方法,创建的“数据文件.txt”,这个时候就会取出。

因为我们只写过一个文件,所以这里也只会显示一个。

 

● 取内部私有数据文件路径

 

帮助文档如下图:

顾名思义,就是取出“私有数据文件”的完整路径,返回的是“文件名”类。

参数就填写你要取的“文件名”即可。

 

代码编写如下图:

添加一个“文件名类”的局部变量,设置参考。

给本方法的参数写“数据文件.txt”,然后赋值给“文件变量”

最后用“取文件名”方法,取出后赋值给“编辑框1.内容”写属性。

 

运行效果如下图:

执行“按钮1”后,编辑框内就会显示完整的文件路径,并且可以看到“数据文件”所在的目录是“files”

 

● 删除内部私有数据文件

 

帮助文档如下图:

顾名思义,就是“删除”一个私有目录内的指定数据文件。

参数内直接填写想要删除的“文件名”即可。

成功返回“真”,失败返回“假”,目标文件不存在返回“假”

 

代码编写如下图:

点击“按钮1”判断本方法删除,参数内输入一个不存在的数据文件。

点击“按钮2”的时候则输入一个存在的文件。

 

运行效果(GIF):

点击"按钮1"目标文件不存在,会返回“失败”

点击"按钮2"成功将“数据文件.txt”删除,再次点击会返回“失败”