作者:创世魂
● 辅助说明
注意:从安卓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”删除,再次点击会返回“失败”。