android.mk遍历子目录,android 保存文件的各种目录列表
一般的,我们可以通过context和Environment来获取要保存文件的目录
($rootDir)
+- /data -> Environment.getDataDirectory()
| |
| | ($appDataDir)
| +- data/com.srain.cube.sample
| |
| | ($filesDir)
| +- files -> Context.getFilesDir() / Context.getFileStreamPath("")
| | |
| | +- file1 -> Context.getFileStreamPath("file1")
| | ($cacheDir)
| +- cache -> Context.getCacheDir()
| |
| +- app_$name ->(Context.getDir(String name, int mode)
|
($rootDir)
+- /storage/sdcard0 -> Environment.getExternalStorageDirectory()
| / Environment.getExternalStoragePublicDirectory("")
|
+- dir1 -> Environment.getExternalStoragePublicDirectory("dir1")
|
| ($appDataDir)
+- Andorid/data/com.srain.cube.sample
|
| ($filesDir)
+- files -> Context.getExternalFilesDir("")
| |
| +- file1 -> Context.getExternalFilesDir("file1")
| +- Music -> Context.getExternalFilesDir(Environment.Music);
| +- Picture -> ... Environment.Picture
| +- ...
|
| ($cacheDir)
+- cache -> Context.getExternalCacheDir()
|
+- ???
各个路径的特性
下面介绍这些路径的特性以及使用中需要注意的细节:
1.根目录($rootDir):
内部存储路径: /data, 通过Environment.getDataDirectory() 获取
外部存储路径: /storage/sdcard0 (也有类似 /mnt/ 这样的),通过Environment.getExternalStorageDirectory()获取
示例
Environment.getDataDirectory():
/data
Environment.getExternalStorageDirectory():
/storage/sdcard0
2.应用数据目录($appDataDir)
内部储存: $appDataDir = $rootDir/data/$packageName,
外部存储: $appDataDir = $rootDir/Andorid/data/$packageName
在这些目录下的数据,在app卸载之后,会被系统删除,我们应将应用的数据放于这两个目录中。
3.外部存储中,公开的数据目录。 这些目录将不会随着应用的删除而被系统删除,请斟酌使用:
Environment.getExternalStorageDirectory():
/storage/sdcard0
// 同 $rootDir
Environment.getExternalStoragePublicDirectory(""):
/storage/sdcard0
Environment.getExternalStoragePublicDirectory("folder1"):
/storage/sdcard0/folder1
4.应用数据目录下的目录
一般的在$appDataDir下,会有两个目录:
1. 数据缓存:$cacheDir = $appDataDir/cache:
内部存储:Context.getCacheDir(), 机身内存不足时,文件会被删除
外部存储:Context.getExternalCacheDir()
外部存储没有实时监控,当空间不足时,文件不会实时被删除,可能返回空对象
示例
Context.getCacheDir():
/data/data/com.srain.cube.sample/cache
Context.getExternalCacheDir():
/storage/sdcard0/Android/data/com.srain.cube.sample/cache
2.文件目录 $filesDir = $appDataDir/files:
内部存储:通过Context.getFilesDir() 获取
Context.getFileStreamPath(String name)返回以name为文件名的文件对象,name为空,则返回 $filesDir 本身
示例:
Context.getFilesDir():
/data/data/com.srain.cube.sample/files
Context.getFileStreamPath(""):
/data/data/com.srain.cube.sample/files
Context.getFileStreamPath("file1"):
/data/data/com.srain.cube.sample/files/file1
外部存储:通过Context.getExternalFilesDir(String type), type为空字符串时获取.
type系统指定了几种类型:
Environment.DIRECTORY_MUSIC
Environment.DIRECTORY_PICTURES ...
示例
Context.getExternalFilesDir(""):
/storage/sdcard0/Android/data/com.srain.cube.sample/files
Context.getExternalFilesDir(Environment.DIRECTORY_MUSIC)
/storage/sdcard0/Android/data/com.srain.cube.sample/files/Music
3.$cacheDir / $filesDir 安全性
在内部存储中,$cacheDir, $filesDir是app安全的,其他应用无法读取本应用的数据,而外部存储则不是。
在外部存储中,这两个文件夹其他应用程序也可访问。
在外部存储中,$filesDir中的媒体文件,不会被当做媒体扫描出来,加到媒体库中。
4.$cacheDir / $filesDir 同级目录
在内部存储中:通过 Context.getDir(String name, int mode)可获取和 $filesDir / $cacheDir 同级的目录
目录的命名规则为 app_ + name, 通过mode可控制此目录为app私有还是其他app可读写。
示例:
Context.getDir("dir1", MODE_PRIVATE):
Context.getDir: /data/data/com.srain.cube.sample/app_dir1
5.特别注意, 对于外部存储,获取$cacheDir 或者 $filesDir及其下的路径
在API level 8 以下,或者空间不足,相关的方法获路径为空时,需要自己构造。
@TargetApi(VERSION_CODES.FROYO)
public static File getExternalCacheDir(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO)) {
File path = context.getExternalCacheDir();
// In some case, even the sd card is mounted,
// getExternalCacheDir will return null
// may be it is nearly full.
if (path != null) {
return path;
}
}
// Before Froyo or the path is null,
// we need to construct the external cache folder ourselves
final String cacheDir = "/Android/data/" + context.getPackageName() + "/cache/";
return new File(Environment.getExternalStorageDirectory().getPath() + cacheDir);
}
参考:http://liaohuqiu.net/cn/posts/storage-in-android/
[android] 保存文件到手机内存
/*****************2016年5月4日 更新*******************************/ 知乎:Android 没有沙盒保护机制吗,WhatsApp 信息为何可被随 ...
Android -- 保存文件
背景 我们以常见 ...
DFS遍历拷贝所有子文件夹及目录列表 (Java版)
如题 注意,文件夹是不能拷贝的, 需要mkdir的 文件选择合适的流进行拷贝 main测试方法 /** * 主测试类,默认将D:\\base01 下的复制到D:\\base02 * @param ar ...
[android] 保存文件到SD卡
/****************2016年5月4日 更新*****************************/ 知乎:为什么很多Android应用要把文件写到/sdcard目录下而不是写到/d ...
android保存文件到SD卡中
想把文件保存到SD卡中,一定要知道SD卡的路径,有人说可以用File explore来查看,这种方法不太好,因为随着android版本的升级,SD卡的路径可能会发生改变.在1.6的时候SD的路径是/s ...
Android NDK开发之Android.mk文件
Android NDK开发指南---Android.mk文件 博客分类: Android NDK开发指南 Android.mk文件语法详述 介绍: ------------ 这篇文档是用来描述你的 ...
Android.mk文件语法规范及使用模板
Android.mk文件语法详述 介绍:------------这篇文档是用来描述你的C或C++源文件中Android.mk编译文件的语法的,为了理解她们我们需要您先看完docs/OVERVIEW.h ...
Android.mk文件官方使用说明
本页介绍了 ndk-build 所使用的 Android.mk 编译文件的语法. 概览 Android.mk 文件位于项目 jni/ 目录的子目录中,用于向编译系统描述源文件和共享库.它实际上是编译系 ...
写文件前, 检查目录写权限(PHP)
写文件前, 检查目录写权限 写或保存文件前, 确保目录是可写的, 假如不可写, 输出错误信息. 这会节约你很多调试时间. linux系统中, 需要处理权限, 目录权限不当会导致很多很多的问题, 文件也 ...
随机推荐
006. C#使用WMI操作远程计算机
1. 使用WMI CIM studio 查看\root\CIMV2 所有可使用的表/字段(类/属性) , 点击下载 WMI CIM studio 2. 安装完成后打开VMI CIM studio
SQL<;>;0查询不到NUll的值
这几天遇到这样一个问题,sql中写<>0,刚好某个记录是NULL,道理上是满足<>0的啊,可是就是抽不出来,关于这个问题,到处找了点资料,算是这里 写一个总结出来. 用java ...
【 socke】C# socket端口复用-多主机头绑定
什么是端口复用: 因为在winsock的实现中,对于服务器的绑定是可以多重绑定的,在确定多重绑定使用谁的时候,根据一条原则是谁的指定最明确则将包递交给谁,而且没有权限之分.这种多重绑定便称之为端口复用 ...
Android Studio 解决方法No JVM installation found. Please install a 64-bit JDK.
————————— Error launching Android Studio ————————— No JVM installation found. Please install a 64-bi ...
给c++程序员的一份礼物——常用工具集
给c++程序员的一份礼物——常用工具集 [声明]如需复制.传播,请附上本声明,谢谢.原文出处:http://morningspace.51.net/,moyingzz@etang.com 所谓&quo ...
【js 实践】js 实现木桶布局
还有两个月左右就要准备实习了,所以特意练一练,今天终于搞定了js 的木桶布局了 这一个是按照一个插件的规格去写的以防以后工作需要,详细的解释在前端网这里 http://www.qdfuns.com/n ...
难受的ESlint语法检测
相信写过vue的各位小白都有过这样的体验,明明引入的文件语法是对的,明明自己写的代码是对的,但是总会报语法错误,没错,就是ESlint代码检测搞的鬼, 就算你在注释后面多打一个空格,它都会去搞事情,简 ...
[Hinton] Neural Networks for Machine Learning - Converage
Link: Neural Networks for Machine Learning - 多伦多大学 Link: Hinton的CSC321课程笔记 Ref: 神经网络训练中的Tricks之高效BP ...
FFMpeg笔记(五) 录制小视频时几个问题解决
1. YUV数据在使用avfilter scale时在特定的分辨率下UV分量不对 由于是小视频,那么分辨率不需要太高,但是有的视频源是1080p,甚至有的是4K的,所以对视频源进行scale非常有必要 ...
Ping程序的实现
Ping程序的实现 在windows系统下进行cmd可以进行ping操作. ping命令是用来确定本地主机与网络中其他主机的网络通信情况,或者查看是否是为效IP. ping的工作原理:网络另一主机发送 ...
android.mk遍历子目录,android 保存文件的各种目录列表相关推荐
- android.mk 强制编译,android.mk文件的编译
android编译系统的makefile文件Android.mk写法如下 (1) Android.mk文件首先需要指定LOCAL_PATH变量,用于查找源文件.由于一般情况下 Android.mk ...
- android.mk 比较字变量,Android.mk的用法和基础
一个Android.mk file用来向编译系统描述你的源代码.具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次.你可以在每一个Android.mk file中定义一个 ...
- android.mk 执行脚本,Android.mk的用法
(1)Android.mk是什么? Android.mk是Android提供的一种makefile文件.Android.mk其实是把真正的Makefile包装起来,做成了一个对使用者来说很简单的东西. ...
- android mk subst功能,Android.mk(零)
Android.mk可以生产的基本文件 LOCAL_PATH:P=$(call my-dir) //返回该Android.mk所在目录的路径,必须放在第一行 定义了当前模块的相对路径 includ ...
- android mk与bp,Android.bp你真的了解吗
Android.bp你真的了解吗 前言 最近在捣鼓Android 9 和10的build系统,看到一篇比较好的博客,大名鼎鼎的gityuan的,奉上链接理解Android.bp,为了方便学习和更多的人 ...
- python根据url下载数据_利用Python如何实现根据URL地址下载并保存文件至对应目录...
利用Python如何实现根据URL地址下载并保存文件至对应目录 发布时间:2020-11-16 14:23:11 来源:亿速云 阅读:58 作者:Leah 这篇文章将为大家详细讲解有关利用Python ...
- android.mk 优化编译,android下ndk编译c优化
android开发中,有时候需要控制包的大小,这样就会要求对代码进行优化, 下面这个文章不错.大家可参考 原文链接 https://blog.algolia.com/android-ndk-how-t ...
- python os 遍历 子目录中所有文件_Python处理文件系统的10种方法 !
通过一个能够实现与文件系统进行交互的Python程序,我们可以实现很多有趣的应用,但是大部分人并不知道如何实现这种交互.本文为相关研发人员和数据科学家提供了一个实现指南,并重点介绍10个基本的os和s ...
- Android.mk转换到Android.bp方法
1.源码在:build/soong/androidmk2.编译源码后,androidmk生成工具位置 # out/soong/host/linux-x86/bin/androidmk3.使用命令 栗子 ...
最新文章
- 扎心了!腾讯扩招至5000人,99%应届生:与我无瓜
- eclipse加载maven工程提示pom.xml无法解析org.apache.maven.plugins:maven-resources-plugin:2.4.3解决方案...
- Java 集合 List Arrays.asList
- wince 环境变量
- R语言第九讲 验证集法
- java websocket
- MySQL增量备份恢复和基于时间点与位置的恢复
- 一文弄清传统软件开发与互联网软件开发的异同
- 网易云Android高级,网易云音乐Android新版 一键升本地音质
- 8.4 大学生,不要再拿兴趣说事——《逆袭大学》连载
- error: incompatible types when assigning to type ‘const struct wiphy_wowlan_support‘
- 微信公众号开发使用测试号不能测试支付接口的解决方案
- 人工智能在量化领域应用相关论文整理
- 14.线程进阶操作(join,setDaemon)
- 【云服务器 ECS 实战】一文掌握弹性伸缩服务原理及配置方法
- Linux里面 grep的用法之根据关键词查询进程PID
- syl——linux学习(一)
- HotSpot JVM -- 深度好文
- ipad上创建html5文件,为 iBooks Author 创建 HTML5 小组件
- wordPress数据结构 数据库中的表、字段、类型及说明
热门文章
- c语言笔试题 ppt,计算机二级考试真题-PPT-陶老师-C语言入门
- php71u配置,IIS+php+mysql+Rewrite+navicat+Serv-u服务器环境配置(365专用)
- 图片过大无法发送怎么办?分享三种图片压缩工具
- 上传文件到服务器网页
- 原子操作 - ARM汇编同步机制实例(一)
- c语言程序设计考研大纲,沈阳建筑大学2018年C语言程序设计考研初试大纲
- nanopi neo2 black 音乐闹钟
- unite 开发_在Unite Nordic振兴您的游戏开发
- 2018-03-29-阿里菜鸟面试(电面一)
- 设计模式1——策略模式 | 适配器模式 | 工厂模式