android中资源文件的两种访问方式,Android_Android学习笔记-保存文件(Saving Files),Android设备有两种文件存储区域 - phpStudy...

Android学习笔记-保存文件(Saving Files)

Android设备有两种文件存储区域:

内部存储和外部存储 ("internal" and "external" storage)。

这名字来自早期Android,那时大多数Android设备提供两种存储方式:内置的非易失的内存(内部存储)和可移动的存储例如micro SD卡(外部存储)。

一些设备将永久内存分为内部和外部两部分,因此即使没有外部存储,依旧有两种存储空间。不管有没有外部存储,API的方法都是一样的。

如我的手机小米2S是16G大小的RAM,不支持SD卡的拓展。它将存储分为了内外两部分,3.71G的系统存储(即内部存储),10.16G的内存设备(即外部存储),如下图所示:

内部存储:

始终都是可用的

保存的文件只能被你的app以默认的方式访问

卸载app,系统从内部存储中删除你app的所有文件

内部存储适用于你不想用户或其他app访问你的文件

外部存储:

不总是可用的(用户可能将外部存储以USB方式连接, 一些情况下会从设备中移除)

是全局可读的(world-readable),因此一些文件可能不受控制地被读取

卸载app,只删除你存储在getExternalFilesDir()目录下的文件

外部存储适用于不需要存储限制的文件以及你想要与其他app共享的文件或者是允许用户用电脑访问的文件

app默认安装在内部存储中,通过指定android:installLocation 属性值可以让app安装在外部存储中。

获取外部存储权限:读与写:

...

读:

...

在内部存储保存文件不需要任何权限,你的app在内部存储中总是有读写权限。

在内部存储中保存文件:

获取适当的目录:

getFilesDir() app文件在内部存储中的目录

eg:

File file = new File(context.getFilesDir(), filename);

getCacheDir() app临时缓存文件在内部存储中的目录

调用openFileOutput()获取FileOutputStream写入文件到内部目录

eg:

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();

}

调用 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卡或USB模式连接了电脑。所有在访问之前需要确认外部存储是可用的。

可以调用 getExternalStorageState() 返回外部存储的状态,如果返回的是MEDIA_MOUNTED,则可以读写在外部存储的文件。

//判断外部存储是否可以读写

public boolean isExternalStorageWritable() {

String state = Environment.getExternalStorageState();

if (Environment.MEDIA_MOUNTED.equals(state)) {

return true;

}

return false;

}

//判断外部存储是否至少可以读

public boolean isExternalStorageReadable() {

String state = Environment.getExternalStorageState();

if (Environment.MEDIA_MOUNTED.equals(state) ||

Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {

return true;

}

return false;

}

外部存储可以被用户或其他app访问,我们可以保存两种文件到外部存储:

1.公共文件(public files)

可以自由地被用户或其他app访问的文件,当用户卸载app时,这些文件依然存在。

调用 getExternalStoragePublicDirectory()获得目录,保存公共文件到外部存储:

public File getAlbumStorageDir(String albumName) {

// 获得用户公共的图片目录

File file = new File(Environment.getExternalStoragePublicDirectory(

Environment.DIRECTORY_PICTURES), albumName);

if (!file.mkdirs()) {

Log.e(LOG_TAG, "Directory not created");

}

return file;

}

2.私有文件(private files)

属于你app的文件,当用户卸载时,这些文件将被删除。

调用getExternalFilesDir() 获得适当的目录,保存私有文件到外部存储:

public File getAlbumStorageDir(Context context, String albumName) {

// 获得应用私有的图片目录

File file = new File(context.getExternalFilesDir(

Environment.DIRECTORY_PICTURES), albumName);

if (!file.mkdirs()) {

Log.e(LOG_TAG, "Directory not created");

}

return file;

}

删除文件:

myFile.delete();

删除保存在内部存储中的文件:

myContext.deleteFile(fileName);

当用户卸载app时,Android系统会删除下列文件:

1.所有保存在内部存储中的文件

2.所有用getExternalFilesDir()保存的文件

我们应该删除所有用getCacheDir() 生成的文件以及不再需要的文件相关阅读:

Andriod 获取电池的信息实例代码

css3弹性盒模型实例介绍

SQLSERVER 根据地图经纬度计算距离差示例

WEB在模态窗体里导出或下载文件功能代码

Win10开始菜单与任务栏的新概念设计图:音乐应用动态磁贴采用交互式设计

javascript屏蔽右键代码

MongoDB db.serverStatus()输出内容中文注释

js实现匹配时换色的输入提示特效代码

Win10让任务栏中间相同程序图标不合并分开的方法

详解javascript实现瀑布流绝对式布局

在CentOS上配置Java环境变量的教程

C#中的委托使用

JavaScript模拟鼠标右键菜单效果

一些有用的meta设置方法(必看)

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

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

相关文章

Struts2.3,s:iterator,c:forEach遍历map中的list集合

一&#xff1a;首先是<s:iterator></s:iterator>遍历map中的list集合&#xff0c;代码如下&#xff1a; 1.首先是后台代码&#xff0c;包括定义map和给map中赋值&#xff0c;代码如下&#xff1a; package cn.gov.csrc.cms.action;import java.util.HashMap; impo…

android 判断对象,Android网络判断知识小结

Android中判断当前网络是否可用应用场景&#xff1a;实现判断当前网络是否可用当前有可用网络&#xff0c;如下图&#xff1a;当前没有可用网络&#xff0c;如下图&#xff1a;实现步骤&#xff1a;1、获取ConnectivityManager对象Context context activity.getApplicationCon…

android fragment动画,Fragment 的过场动画

Fragment 的过场动画Android,Fragment,动画2018.08.03在 Android 开发中&#xff0c;有些应用对页面的过场动画要求比较高&#xff0c;他们中期望给用户提供一个良好的用户体验。适当的过场动画可以减少用户在页面加载时期等待的焦虑&#xff0c;因为让他们看一个动画&#xff…

android 联系人批量插入,GitHub - Atinerlengs/InsertDemo: android 简单的批量插入通话记录、联系人、短信demo...

[toc]批量插入批量插入通话记录下面是添加通话数据的代码&#xff0c;我们自己去构造Tb_calllogs数据&#xff0c;里面可以添加通话记录数据字段&#xff0c;由于是个简单的demo&#xff0c;所以只加了number、callType、date、callDuration。/*** 添加通话数据** throws Remot…

html页面按钮删除一条数据库,需要添加一个删除按钮到一个HTML表格从数据库中删除记录与消息...

IDNameCodeActiveEdit<?php foreach($nurseries->result() as $nursery) { ?><?php echo $nursery->id; ?><?php echo $nursery->name; ?><?php echo $nursery->code; ?><?php echo set_bool($nursery->active); ?><…

EL表达式, JSTL, 获取map集合中key的value

序言&#xff1a;今天在项目中使用了map存储list和普通对象&#xff0c;但是在jsp中显示的时候出来问题&#xff0c;后经查阅&#xff0c;终于解决&#xff0c;现在记录一下&#xff0c;以便以后查阅&#xff1a; 一&#xff1a;后台代码如下&#xff1a; package cn.gov.csrc…

html选择器是什么,CSS3选择器是什么?

首先我们来看一下displaynone的意思是什么&#xff1f;display:none的意思&#xff1a;隐藏元素并脱离文档&#xff0c;流就是隐藏该区域&#xff0c;不占实际空间&#xff0c;但对后台来说真实存在&#xff0c;可以获取被隐藏的元素简单的来说就是将元素设置为none的时候既不会…

零基础学计算机408,又一所重点大学改考408!21计算机考研会全面408吗?

【北京工业大学】于7月17日发布《关于北京工业大学2021年全国硕士研究生招生考试部分考试科目及考试大纲调整的通知》&#xff0c;要点如下&#xff1a;文法学部0401教育学专业课改考 311统教育学信息学部计算机学院0812计算机科学与技术0839网络空间安全0854电子信息 (专业学位…

国贸专业要考计算机二级,国贸专业考计算机二级有没有必要

类似问题答案我是自动化专业的学生&#xff0c;大一的时候有没有必要考计算机二级证书计算机二级 虽然不是很重要 但是考了也是有好处的 自动化的跟计算机联系非常大 二级证不怎么重要 但是C语言很重要 对于你们 希望你还是去考个二级作为学习建筑类专业的学生,如果考试计算机二…

edge如何导入html文件收藏夹,edge浏览器收藏夹如何导入?edge浏览器收藏夹导入方法...

在使用浏览器的时候需要用户进行多方便的导入和使用&#xff0c;这样在数据共享和传递的时候才会更加的方便&#xff0c;那么这款软件要如何操作使用呢&#xff0c;有兴趣的用户可以使用手机快速申请使用&#xff0c;帮助用户的生活&#xff0c;让用户的生活更加的便捷&#xf…

中职生计算机专业600分,来了!超全盘点高职分类中500-600分及以上的高中生能报的专业和院校名单!...

福建高职分类考试志愿填报4月27日开始&#xff0c;招生计划不断更新中关注【福建高考】&#xff0c;免费使用志愿填报工具参加高职分类的同学们志愿填报在即&#xff0c;你定好目标了吗&#xff1f;本期&#xff0c;小编为大家盘点高职分类各分段的高中生能报哪些专业和大学~一…

Oracle中通过:触发器,存储过程,Function调用实现解析Clob字段类型中存储的xml字符串...

摘要&#xff1a;最近项目中用到了存储过程&#xff0c;触发器&#xff0c;Function&#xff0c;由于以前没怎么用过&#xff0c;所以查资料&#xff0c;请教同事&#xff0c;最后总算是把问题解决了&#xff0c;问题是这样的&#xff0c;数据库中有三张表一张是存放从远程服务…

plc采用计算机结构如何理解,PLC的基本结构

plc实质是一种专用于工业控制的计算机&#xff0c;其硬件结构基本上与微型计算机相同&#xff0e;a. 中央处理单元(CPU)中央处理单元(CPU)是PLC的控制中枢。它按照PLC系统程序赋予的功能接收并存储从编程器键入的用户程序和数据&#xff1b;检查电源、存储器、I/O以及警戒定时器…

华为手机怎么用计算机玩隐藏空间,玩法 | 华为手机这五个隐藏功能,用过的都说好!...

原标题&#xff1a;玩法 | 华为手机这五个隐藏功能&#xff0c;用过的都说好&#xff01;欢迎转载&#xff0c;请注明出处&#xff0c;抄袭必究&#xff01;近年来国产手机都很争气&#xff0c;华为、小米、OPPO、vivo都迅速的成长起来&#xff0c;让大家告别了疯抢苹果的时代。…

Html做文章查看上一篇下一篇功能,SDCMS文章添加上一篇、下一篇

SDCMS是一款小型ASP内容管理系统管理开源程序&#xff0c;虽然是小型的&#xff0c;但是主要功能都俱备。在细节方面&#xff0c;该款开源程序没有对内置标签进行统一的管理&#xff0c;不方便日后功能的修改&#xff0c;如果需要修改或者添加&#xff0c;需要去官方网站上查阅…

微型计算机简化结构,基于FPGA的简易微型计算机结构分析与实现

0 引言通常&#xff0c;人们对微型计算机的工作原理及硬件结构的了解来源于书本知识&#xff0c;深入理解掌握其功能特点比较困难&#xff0c;要自己亲手去做一个类似功能的微型计算机更是不可能。随着可编程逻辑器件的广泛应用&#xff0c;为数字系统的设计带来了极大的灵活性…

django 返回ajax html,Django 前台通过json 取出后台数据

前台通过json 取出后台数据步骤1:后台数据通过 JSON 序列化成字符串注意&#xff1a;1、json是1个字符串2、通过json.dumps(xxx) 序列化成 1个字符串的 字典对象views.pydef ajax(request):if request.methodPOST:print(request.POST)data{status:0,msg:请求成功,data:[11,22,3…

Toad for Oracle 导入MIP.dmp文件时:报内存不足时的解决办法:

摘要&#xff1a;最近在使用Oracle数据库开发项目&#xff0c;其中在用Toad for Oracle连接操作Oracle11g的时候出现了问题&#xff0c;问题是这样的&#xff1a;在数据库管理员的连接下导入已经建立的用户的dmp文件&#xff0c;会报内存不足的问题&#xff0c;最后经查&#x…

长春金桥计算机学校,金桥学校2017年招生简章

原标题&#xff1a;金桥学校2017年招生简章金桥学校创建于2000年5月&#xff0c;现有45个教学班&#xff0c;在校学生2700余人。近年来&#xff0c;学校以“培养高素质的现代中国人”为办学目标&#xff0c;坚持“德育为首、做人第一”的办学理念&#xff0c;积极改革创新&…

计算机联锁软件毕设论文,铁路信号计算机联锁系统()毕设论文.doc

铁路信号计算机联锁系统()毕设论文PAGE北京交通大学信号10级毕业论文题 目 微机联锁系统故障及处理分析专 业 铁道信号班 级 10信号姓 名 陈 勇二0一二 年 七 月摘 要计算机联锁系统是实现铁路现代化和自动化的基础设施之一&#xff0c;是一种高效、安全的车站联锁设备&#xf…