05 Android基础--内部存储与外部存储

news2024/11/25 22:46:35

05 Android基础--内部存储与外部存储

    • 什么是内部存储,什么是外部存储?
    • 内部存储与外部存储的代码示例

什么是内部存储,什么是外部存储?

1.内部存储与外部存储的存储介质:
内部存储的介质:RAM(内存) + 内部ROM
外部存储的介质:外部ROM + SDCard(TS卡等等)。

2.内部存储与外部存储的存储特点:

2.1一般来说,以/data开头的是内部存储。且内部存储不需要任何权限。
例如:

  • /data/data/< applicationId >/shared_prefs
  • /data/data/< applicationId >/databases
  • /data/data/< applicationId >/files // 通过context.getFilesDir() 获取该目录
  • /data/data/< applicationId >/cache //通过context.getCacheDir() 获取该目录

2.2 内部存储需要关注的文件夹:
app文件夹(未root无法打开):存放着所有app的apk文件夹
data文件夹:内部都是app的包名,存储着应用程序相关的数据,例如 data/data/包名/(shared_prefs、database、files、cache)

2.3 Android SDK提供了几个常见的内部存储文件的权限

  • Context.MODE_PRIVATE :私有方式存储,其他应用无法访问,覆盖旧的同名文件
  • Context.MODE_APPEND:私有方式存储,若有旧的同名文件,则在该文件上追加数据

2.4 一般来说,外部存储会放在storage文件夹下或者mnt文件夹下。且需要安卓的权限。
例如:
私有外部存储

  • /storage/emulated/0/Android/data/< applicationId >/files/Music //Context.getExternalFilesDir() 包含如Music等文件夹
  • /storage/emulated/0/Android/data/< applicationId >/cache //Context.getExternalCacheDir 外部缓存文件

以及共有外部存储

  • /storage/emulated/0 Environment.getExternalStorageDirectory()
  • /storage/emulated/0/Pictures Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)

2.5 外部存储需要注意的文件夹即外部存储的分类:
storage中有一个sdcard文件夹,sdcard下面可以分两类存储:

外部共有存储(共有目录):里面常见的有Pictures、Download等文件夹.

外部私有存储(私有目录):系统中的数据。

在这里插入图片描述

内部存储与外部存储的文件夹:
在这里插入图片描述

3.内部存储与外部存储,释放内存方面的总结:

  • 内部存储:随应用卸载被删除。
  • 外部存储:
    1.公有目录:存放一些下载的视频文件等,比如还有movies,fictures,music等公有的一些文件目录。
    2.私有目录:随应用卸载被删除。

内部存储与外部存储的代码示例

内部存储

				// 存
 				FileOutputStream fos = null;
                try {
                    //第一个参数:文件名
                    //第二个参数:表示文件输出的类型 这里选择Context.MODE_PRIVATE每次生成相同的文件名,则覆盖原有的文件
                    fos = openFileOutput('test', Context.MODE_PRIVATE);
                    String nameAndPassword = username + "." + password;
                    byte[] bytes = nameAndPassword.getBytes();
                    fos.write(bytes);
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    if (fos != null) {
                        try {
                            fos.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }


				// 取
				FileInputStream fis = null;
                try {
                    fis = openFileInput(fileName);
                    //fis.available() 判断文件有多少个字节
                    byte[] bytes = new byte[fis.available()];
                    while (fis.read(bytes) != -1) {
                        String message = new String(bytes);
                        String[] split = message.split("\\.");
                        tv_message.setText("用户名:" + split[0] + "\n" + "密码:" + split[1]);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }

外部存储

// 获取外部存储地址的位置并创建文件:
new File(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)
				// 存
				OutputStream outputStream = null;
                try {
                   
                        outputStream = new FileOutputStream(new File(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), 'test2'));
                        String nameAndPassword = username + "." + password;
                        byte[] bytes = nameAndPassword.getBytes();
                        outputStream.write(bytes);
                    
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    if (outputStream != null) {
                        try {
                            outputStream.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }

				// 取
				 FileInputStream fis = null;
                try {
                    //第一个参数:文件目录 第二个参数:文件名
                    //getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)对应的路径为:
                    // /storage/emulated/0/Android/data/com.example.customviewproject/files/Download
                    File file = new File(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), fileName);
                    
                        fis = new FileInputStream(file);
                        //判断当前文件的字节个数
                        byte[] bytes = new byte[fis.available()];
                        while (fis.read(bytes) != -1) {
                            String message = new String(bytes);
                            String[] split = message.split("\\.");
                            tv_message.setText("用户名:" + split[0] + "\n" + "密码:" + split[1]);
                        }

                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    if (fis != null) {
                        try {
                            fis.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/384909.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【连接池】什么是HikariCP?HikariCP 解决了哪些问题?为什么要使用 HikariCP?

文章目录什么是连接池什么是HikariCPHikariCP 解决了哪些问题&#xff1f;为什么要使用 HikariCP&#xff1f;HikariCP 的使用Maven支持数据库什么是连接池 数据库连接池负责分配、管理和释放数据库的连接。 数据库连接复用&#xff1a;重复使用现有的数据库长连接&#xff0…

PayPal轮询收款的那些事儿

想必做跨境电商独立站的小伙伴&#xff0c;对于PayPal是再熟悉不过了&#xff0c;PayPal是一个跨国际贸易的支付平台&#xff0c;对于做独立站的朋友来说跨境收款绝大部分都是依赖PayPal以及Stripe条纹了。简单来说PayPal跟国内的支付宝有点类似&#xff0c;但是PayPal它是跨国…

攒了一冬的甜,米易枇杷借力新电商走出川西大山

“绿暗初迎夏&#xff0c;红残不及春。魏花非老伴&#xff0c;卢橘是乡人。”苏轼文中的卢橘&#xff0c;就是枇杷&#xff0c;在苏轼看来&#xff0c;相较于姚黄魏紫&#xff0c;来自故乡四川的枇杷更为亲近。 四川省攀枝花市米易县是全国枇杷早熟产区之一&#xff0c;得益于…

【存储】RAID2.0+、多路径技术、磁盘可靠性技术

RAID2.0RAID 2.0技术RAID技术发展RAID 2.0软件逻辑对象RAID 2.0基本原理硬盘域Storage Pool & TierDisk Group&#xff08;DG&#xff09;LD&#xff08;逻辑磁盘&#xff09;Chunk&#xff08;CK&#xff09;Chunk Group&#xff08;CKG&#xff09;ExtentGrainVolume &am…

米尔Zynq 7000系列单板的FPGA农业生产识别系统

随着农业生产模式和视觉技术的发展&#xff0c;农业采摘机器人的应用已逐渐成为了智慧农业的新趋势&#xff0c;通过机器视觉技术对农作物进行自动检测和识别已成为采摘机器人设计的关键技术之一&#xff0c;这决定了机器人的采摘效果和农场的经济效率。目前市面上最常见的是基…

MATLAB-Scatter3-三维散点图投影至XYZ三个平面

MATLAB-Scatter3函数可以绘制立体的三维散点图&#xff0c;但有时候需要在该立体图中分析X-Y-Z三者的关系&#xff0c;即1副图呈现出4个信息&#xff0c;XYZ综合信息、XY信息、XZ信息、YZ信息。现有的Scatter3无法实现该功能&#xff0c;本文可实现Scatter3三维立体散点图在三个…

纯手动搭建大数据集群架构_记录011_搭建Nifi_安装部署_搭建集群---大数据之Hadoop3.x工作笔记0172

可以看到左侧,把nifi安装包先上传到服务器,然后,去解压,一样放到opt/software目录,然后解压到/opt/module目录 然后去修改这个配置文件nifi.properties,然后 然后nifi.web.http.port=58080 这里只把 nifi.web.http.port=8080 这个端口改成 58080就可以了. 然后我们进入nifi的bi…

《计算机系统基础》——数据的表示

文章目录《计算机系统基础》——数据的表示移码整数无符号整数 (Unsigned integer)带符号整数&#xff08;Signed integer&#xff09;测试代码浮点数表示范围IEEE 754标准例子规格化数0∞/-∞非数非规格数《计算机系统基础》——数据的表示 移码 &#x1f680;&#x1f680;…

2023年中国人工智能产业趋势报告

易观&#xff1a;尽管2022年人工智能市场发展活跃度不及预期&#xff0c;但2022年对人工智能产业来说无疑是令人激动的一年。年中由DALL-E 2以及其后Stable Diffusion和Midjourney等文本-图像生成模型引起公众对人工智能生成内容的大量关注&#xff0c;年末ChatGPT的横空出世刷…

硬件系统工程师宝典(13)-----PCB的布局“有讲究”

各位同学大家好&#xff0c;欢迎继续做客电子工程学习圈&#xff0c;今天我们继续来讲这本书&#xff0c;硬件系统工程师宝典。上篇我们说到EMC的标准以及提高EMC性能的一些常用方法。今天我们来看看PCB上模块的布局有什么讲究。 模块划分及布局 PCB上模块的划分和布局会影响到…

ATTCK v12版本战术实战研究—持久化(二)

一、前言前几期文章中&#xff0c;我们介绍了ATT&CK中侦察、资源开发、初始访问、执行战术、持久化战术的知识。那么从前文中介绍的相关持久化子技术来开展测试&#xff0c;进行更深一步的分析。本文主要内容是介绍攻击者在运用持久化子技术时&#xff0c;在相关的资产服务…

如何使用固态继电器为恒温器供电

恒温器有两种电源&#xff1a;电池和 24VAC。恒温器需要电池才能不间断地运行。电池消耗的能量尽可能低非常重要&#xff0c;但即使您最大限度地减少消耗&#xff0c;这仍然不是一个用户友好的选择&#xff0c;因为电池会不时需要更换。要降低更换频率&#xff0c;可以使用 24V…

Mysql InnoDB 存储引擎笔记

1 存储引擎 简介 Mysql 存储引擎有多种&#xff1a;包括 MyISAM、InnoDB 和 Memory。 其中MyISAM 和 INNODB 的区别&#xff1a; 事务安全&#xff08;MyISAM不支持事务&#xff0c;INNODB支持事务&#xff09;&#xff1b;外键 MyISAM 不支持外键&#xff0c; INNODB支持外…

渗透测试之地基服务篇:无线攻防之Kali自搭建钓鱼Wifi

简介 渗透测试-地基篇 该篇章目的是重新牢固地基&#xff0c;加强每日训练操作的笔记&#xff0c;在记录地基笔记中会有很多跳跃性思维的操作和方式方法&#xff0c;望大家能共同加油学到东西。 请注意 &#xff1a; 本文仅用于技术讨论与研究&#xff0c;对于所有笔记中复现…

【Python】控制自己的手机拍照,并自动发送到邮箱

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 今天这个案例&#xff0c;就是控制自己的摄像头拍照&#xff0c; 并且把拍下来的照片&#xff0c;通过邮件发到自己的邮箱里。 想完成今天的这个案例&#xff0c;只要记住一个重点&#xff1a;你需要一个摄像头 思路…

DCDC/LDO Auto-Discharge

1、概念 When using a capacitor with large capacity value in VOUT side, the VOUT pin voltage might not immediately fall to the ground level when the EN(CE,CONTROL) pin is switched from the active mode to the standby mode. By adding N-channel transistor to …

【Java|基础篇】计算机中数据的存储规则

文章目录前言:1.计算机中的数据2.二进制的介绍二进制的运算规则常见的进制3.字符的存储4.汉字的存储5.图片的存储6.音频的存储总结:前言: 本篇文章只是为了科普 计算机中数据的存储规则 1.计算机中的数据 计算机的数据大致分为三类:文本数据,图片和音频 注:视频是图片和音频…

代码随想录算法训练营day48 | 动态规划 121 买卖股票的最佳时机 122 买卖股票的最佳时机II

day48121. 买卖股票的最佳时机1.确定dp数组&#xff08;dp table&#xff09;以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组122.买卖股票的最佳时机II121. 买卖股票的最佳时机 题目链接 解题思路&#xff1a; 动规五部曲分析如下&#xff1a…

PLC实验—西门子S7 1200读取旋转编码器数据并计算电机转速

PLC实验—西门子S7 1200读取旋转编码器数据并计算电机转速 注意PTO控制步进电机实验博途软件需要V14版本&#xff0c;不然没有PTO功能块 软件的下载请点击下方百度网盘的链接 链接&#xff1a;https://pan.baidu.com/s/11mQFVnaQxrUy4W9nGIk8Jw 提取码&#xff1a;6lva 详细的…

如何解决企业生产计划做不好,生产管理混乱?

现在很多企业都面临着生产计划做不好&#xff0c;生产管理混乱的问题&#xff0c;本文将为大家讲讲如何解决这些问题。要想解决问题&#xff0c;首先要知道其原因。 企业生产管理混乱原因 第一&#xff1a;企业的导向有问题 许多中小企业的老板都是业务出身&#xff0c;都知…