Android 文件存储系统

支付宝 内部js AlipaySDK {"success":true,"templateJsonList":["{\"data\":\"{\\\"tag\\\":\\\"html\\\",\\\"children\\\":[{\\\"tag\\\":\\\"head\\\",\\\"children\\\":[{\\\"tag\\\":\\\"meta\\\",\\\"type\\\":\\\"i18n\\\",\\\"src\\\":\\\"AlipaySDK.bundle/amc.i18n\\\"},{\\\"tag\\\":\\\"lin 阅读详情

一、内部存储(internal storage)和外部存储(external storage)的比较:


1.内部存储总是可用的,外部存储不总是可用的,用户可以人为的卸载;
2.当用户卸载你的软件时,该软件存储在内存的所有文件会被移除,对于存储在sd卡的文件,只能移除通过getExternalFilesDir()
获取的文件夹下的文件;
3.读写内存不需要权限,读写sd卡需要相应权限。


二.向内存存储:
通过getFilesDir()或者getCacheDir()获得一个代表内存目录的File对象,要在这个目录下创建文件,可以调用File对象的相应构造方法,
如:
File file = new File(context.getFilesDir(), filename);

也可以通过openFileOutput()获得一个FileOutputStream对象来向内存中的某个文件写入数据,如:

String filename = "myfile";
String string = "Hello world!";
FileOutputStream outputStream;

try {
  outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
  outputStream.write(string.getBytes());
  outputStream.close();
} catch (Exception e) {
  e.printStackTrace();
}


还可以通过openFileInput()方法获取FileInputStream,用来向内存中某个文件写入数据。

如果需要缓存一些文件,则可以调用createTempFile()方法,如:


public File getTempFile(Context context, String url) {
    File file;
    try {
        String fileName = Uri.parse(url).getLastPathSegment();
        file = File.createTempFile(fileName, null, context.getCacheDir());
    } catch (IOException e) {
        // Error while creating file
    }
    return file;
}


三、向sd卡存储:
每次向sd卡读写数据时,都要判断其是否可用,如:

/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        return true;
    }
    return false;
}

在sd卡中有两种类型的文件种类:一种是可以被任意app访问的,当卸载软件时不会删除;一种是app所私有的,当卸载软件时一并删除。
要获取可以任意访问类型的文件,调用 getExternalStoragePublicDirectory()方法返回一个文件夹,如:

public File getAlbumStorageDir(String albumName) {
    // Get the directory for the user's public pictures directory.
    File file = new File(Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES), albumName);
    if (!file.mkdirs()) {
        Log.e(LOG_TAG, "Directory not created");
    }
    return file;
}
第一个参数指定你要存储的文件类型,如 DIRECTORY_MUSIC, DIRECTORY_RINGTONES,也可以为空。

要获取为你的app所私有的文件,调用 getExternalFilesDir()方法,如:

public File getAlbumStorageDir(Context context, String albumName) {
    // Get the directory for the app's private pictures directory.
    File file = new File(context.getExternalFilesDir(
            Environment.DIRECTORY_PICTURES), albumName);
    if (!file.mkdirs()) {
        Log.e(LOG_TAG, "Directory not created");
    }
    return file;
}

注:一些设备可能在手机的内存中分出部分空间作为external storage,如果此设备运行在Android4.3或更早的
版本上, getExternalFilesDir()只会返回对应的使用内存的文件夹,而不会在sd卡上存储数据,而在Android4.4版本之后,可以通过调用
 getExternalFilesDirs()获取一个外部存储文件夹数组,该数组的第一个元素对应sd卡下的文件夹。


在sd卡上缓存文件:
 调用getExternalCacheDir(),该文件夹也存在上述问题,可以通过调用 getExternalCacheDirs()解决。

四、获取可用空间
调用getFreeSpace()和getTotalSpace()方法。



数据存储之——Android文件存储系统及文件系统(Android Q) Android存储系统及存储的挂载 Android是基于Linux内核开发的,所以它的文件系统也是跟Linux文件系统类似。 首先我们来看Android存储的分类。 内部存储和外部存储、内置SD卡和外置SD卡 一般的Android手机都有2个存储卡,一个内置到手机里的,不可更换,叫做内置存储卡;另外一个可以通过扩展卡槽添加一个SD卡,叫做外置SD卡。内置存储卡和外置SD卡,它们是从物理上来进行区分的,一个内置到设备,另一个是添加的扩展卡。 对于Android系统来说,存储只分为内部存储和外部存储两类。内部 阅读详情

相关推荐

Android数据存储:文件存储系统

存储方式选择根据数据特性选择合适的存储方式考虑安全性、性能和兼容性遵循最小权限原则性能优化合理使用缓存异步处理IO操作及时释放资源安全考虑加密敏感数据避免存储隐私信息正确处理权限最佳实践使用工具类封装常用操作实现统一的错误处理保持代码可维护性。

Ya-Jun 的博客 243

Android存储系统之架构篇

http://gityuan.com/2016/07/23/android-io-arch/ 基于Android 6.0的源码,剖析存储架构的设计 一、概述 本文讲述Android存储系统的架构与设计,涉及到最为核心的便是MountService和Vold这两个模块以及之间的交互。上一篇文章Android存储系统之源码篇从源码角度介绍相关模块的创建与启动过程,

hery186的专栏 5398

从TL431光耦到集成隔离器:3种反激电源反馈方案全对比,你的项目到底该选哪个?

本文深入对比了反激电源设计中TL431光耦、集成隔离器和原边反馈三种主流反馈方案的优缺点,帮助开发者在电源设计中选择最适合的方案。从精度、成本、隔离等级等多维度分析,为反激式(Flyback)拓扑的应用提供实用选型指南。

weixin_30536513的博客 399

android 存储系统架构

借鉴书本上的一副图:

SuperZhanshi223的博客 718

使用trae自动生成前后端分离的web应用程序

使用ai自动生成前后端分离的web应用程序

一介书生 2526

保姆级避坑指南:在Ubuntu 22.04上成功复现VMamba模型(附完整环境依赖清单)

本文提供了在Ubuntu 22.04上复现VMamba模型的详细指南,包括环境准备、CUDA与PyTorch的精确匹配、依赖安装的疑难杂症解决以及完整环境清单。特别针对Linux系统下的环境复现问题,提供了实用的避坑技巧和验证方法,帮助开发者高效完成VMamba模型的部署。

weixin_29083373的博客 263

Android 7.0 存储系统—Vold与MountService分析(二)(转 Android 9.0 分析)

Android的存储系统(二) 回顾:前贴主要分析了Android存储系统的架构和原理图,简要的介绍了整个从Kernel-->Vold-->上层MountService之间的数据传输流程,在这样的基础上,我们开始今天的源码分析! 【源码分析】 1. Vold的main函数   Vold也是通过init进程启动,它在init.rc中的定义...

weixin_30666401的博客 335

【实战教程】OpenClaw接入MySQL数据库实战指南

本文介绍了在虚拟机Ubuntu中访问宿主机Win11中MySQL数据库的配置方法,重点包括创建远程用户、权限配置和安全设置。首先在MySQL中创建具有只读权限的用户并刷新权限,然后调整服务器设置允许远程连接。文章还提供了某金融机构财富管理系统的数据库设计方案,包含理财产品表、客户表和份额表的核心结构,其中金额字段使用DECIMAL类型确保精度,并设置唯一键约束。文末强调测试环境配置完成后应恢复安全更新模式以保障生产环境安全。

海兰 8700

Android存储系统的架构与设计

一、概述 本文讲述Android存储系统的架构与设计,基于Android 6.0的源码,涉及到最为核心的便是MountService和Vold这两个模块以及之间的交互。为了缩减篇幅,只展示部分核心代码。 MountService:Android Binder服务端,运行在system_server进程,用于跟Vold进行消息通信,比如Mount...

weixin_34208283的博客 251

Android Camera驱动开发工程师面试指南:技术深度与实战准备

摘要:上海移远通信招聘Android Camera驱动开发工程师,主要负责Camera传感器驱动开发维护、高通/展锐平台底层开发及技术预研。岗位要求1年以上嵌入式开发经验,精通Camera传感器驱动调试,熟悉高通平台Camera架构及Android HAL框架。具备HAL开发、算法集成或车载/支付行业经验者优先。工作内容以Driver/HAL开发为主,需具备硬件接口评估能力。该职位接受Linux/单片机背景人员转型。

郑伟强dev的专栏 281

【雕爷学编程】Arduino动手做(75)---TTL转RS-485模块之二线制可以实现真正的多点双向通信

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验七十五:TTL转RS-485模块 MAX485 RS485模块 MAX485 是一个8.

雕爷学编程 1万+

探秘Android_Excel:在安卓平台上轻松生成Excel表格

探秘Android_Excel:在安卓平台上轻松生成Excel表格 在移动开发领域,将数据导出为Excel表格是一项实用的功能,特别是在处理报表、订单或者统计数据时。今天,让我们一起来探索一个强大且易于使用的开源项目——Android_Excel,它使得在Android应用程序中直接生成Excel文件变得轻而易举。 项目介绍 Android_Excel 是一个简洁高效的开源库,旨在帮助开发者无需复...

gitblog_01072的博客 887

vue2/3 - 详细对接海康监控实时视频预览和录像回放功能,vue接入使用海康视频监控播放器实时推流等功能,支持hik/rtsp/rtmp/hls/ws取流协议(详细教程与示例代码,一键复制开箱即用

vue2,vue3,海康,vue海康视频监控,海康开放平台,如何接入海康的实时监控,海康威视,Vue实现海康监控视频播放,vue3对接海康视频监控播放、回放的方法流程,实现海康H5视频插件播放视频的实例,web网页接入海康,海康威视的视频vue的录像回放和实时预览,前端vue3项目接入海康威视h5player.js播放器,vue2接入海康威视视频监控平台,使用海康监控H5视频播放,对接海康视频监控,海康视频web插件,web前端在vue中通过海康插件嵌入视频,实现实时预览,vue3海康监控播放器组件,vue

✅ 精选推荐文章 1万+

Android存储系统成长记

您一定使用过Context的getFileStreamPath方法或者Environment的getExternalStoragePublicDirectory方法,甚至还有别的方法把数据存储到文件中,这些都是存储系统提供的服务,那本文从存储系统“成长”的角度,来揭开存储系统的秘密

niurenwo的专栏 1131

《基于YOLOv5/8/10的足球比赛球员识别系统毕设全指南:从开发到部署的一站式实战》

本文提出了一个基于YOLO系列模型的足球球员识别系统,具备完整的开发流程和技术方案。系统通过YOLOv5/8/10三大框架实现球员检测,平衡精度与速度需求。开发过程包含数据标注与增强、模型训练调优、PyQt5界面开发等关键环节,并提供了模型轻量化、多任务扩展等优化方向。系统可实现单张图像和视频流的实时识别,支持跨设备部署,适用于赛事分析和训练复盘场景。项目特色在于完整的技术实现路径和对不同YOLO框架的性能对比,为计算机视觉在体育领域的应用提供实践参考。

m0_71589036的博客 216

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

android应用存储,android 应用内文件存储系统

应用包名:com.gyq.traininggetFilesDir()路径:/data/user/0/com.gyq.training/filesgetDir("Gyq", Context.MODE_PRIVATE)路径: /data/user/0/com.gyq.training/app_GyqgetCacheDir()路径: /data/user/0/com.gyq.training/cache...

weixin_36009861的博客 230

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

android 查看文件存储成功,Android 获取文件存储系统的相关信息

packagecom.mob.getsdandphone;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileReader;importjava.io.IOException;importjava.lang.reflect.Method;importjava.text.DecimalFormat;impo...

weixin_34275113的博客 207

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

android存储系统

​ Android的存储系统主要由SystemServer进程的MountService和Vold进程的VolumeManager组成。它们管理系统的存储设备,执行各种操作,如mount、unmount、format等。 ​ 在Android存储系统中,MountService是为应用提供服务的Binder类,运行在SystemServer中,而StorageManager是MountServer的代理,在用户进程中使用的。Vold是一个守护进程,负责和底层存储系统驱动交互。MountService和

k663514387的博客 941

Android 获取文件存储系统的相关信息

packagecom.mob.getsdandphone; importjava.io.BufferedReader; importjava.io.File; importjava.io.FileReader; importjava.io.IOException; importjava.lang.reflect.Method; importjava...

M_Andrain的博客 51

android 获取存储信息吗,Android 获取文件存储系统的相关信息

packagecom.mob.getsdandphone;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileReader;importjava.io.IOException;importjava.lang.reflect.Method;importjava.text.DecimalFormat;impo...

weixin_35125597的博客 149

Android 储存系统--使用相机拍照保存到文件

Android 文件储存系列方法1. 先从一个例子说起:使用隐式 Intent 启动相机拍照保存为头像:final Intent captureImage = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // 检查相机是否可用 boolean canTakePhoto = mPhotoFile != null &&

赫顿玛尔的土罐 1747

Android 存储系统核心解析:架构、机制与开发实践

本文深入解析Android存储系统的双层架构设计,重点阐述内部存储和外部存储的核心机制。内部存储采用Linux UID验证实现严格隔离,存放敏感私有数据;外部存储通过FUSE(用户空间文件系统)实现安全共享,结合挂载命名空间为不同权限应用提供定制视图。文章对比了两类存储的特性差异,并针对不同开发场景给出最佳实践建议:私有数据使用内部存储API,媒体文件采用MediaStore,文档操作推荐StorageAccessFramework,临时文件使用应用专属外部目录。全文揭示了Android在数据安全与共享便利

代码煮茶君 1053

什么是android刷机包,什么是安卓RAM?安卓RAM和安卓ROM有什么区别?

我们平时听到的安卓系统其实是一个很复杂的程序,就比如安卓ROM和安卓RAM,安卓ROM我们平时可能听说过,但是RAM可能听说就比较少了,对于初次了解安卓的机友来说可能是一个模糊的地方。今天,小编就为大家详细的讲解一下什么是RAM,RAM和ROM有什么实质的区别。一、ROM和RAM的介绍ROM是英文Read Only Memory的首字母的缩写,其意思是储存器只能读不能写。RAM是英文Readom ...

weixin_30864831的博客 784
上一篇: HTML 基本格式
下一篇: SQLite数据库基本操作
ssjj_programmer
博客等级 码龄11年 2粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值