Android应用开发——文件目录

Android 存储位置及 API

一、内部存储

应用安装后都会在Android 根目录生成 /data/data/packagename,当前应用读取不需要读写权限

注意: 有些开发者可能看到过应用的根目录为 /data/user/0/packagename 的情况,这里解释一下,Android 4.2 版本添加了同一设备可以登录不同用户的功能(由于专利原因仅限于平板电脑,手机不支持此功能),所以为了区分不同用户在同一应用中的设置和存储的数据,添加了该系列的路径,该路径指向 /data/data/packagename

getFileDir() 方法得到的是该目录下 files 文件夹的 File 对象
getChacheDir() 方法得到的是该目录下 cache 文件夹的 File 对象
直接调用ContextWrapper的 openFileOutput(String name,int mode) 也会在该目录下 files 文件夹下创建相应的文件,并且是私密的。可以修改为其他应用可访问的,通过 openFileOutput 方法的 mode 参数来完成
注意:

  • 该目录只有 root 权限下可以查看,会随着应用卸载删除
  • 应用程序详情中清除数据会将 packagename 下所有数据以及内置存储、外置 SD 卡存储空间中 /Android/data/packagename 的整个目录删除删除
  • 应用程序详情中清除缓存会将 packagename/cache 目录下所有数据以及内置存储、外置 SD 卡存储空间中 /Android/data/packagename/cache 的整个目录删除
二 内置存储
手机自带 ROM 的存储路径

getExternalCacheDir() 方法,获取内置存储卡中 /Android/data/packagename/cache 目录的路径,4.4及之后读写不需要权限,会随着应用卸载删除
getExternalFilesDir() 方法,获取内置存储卡中 /Android/data/packagename/files 目录的路径,4.4之后读写不需要权限,会随着应用卸载删除,该方法参数为 “null” 时不指定子文件夹,指定时创建子文件夹保存文件。创建的文件其他应用只要有读写权限也可以读取,如果要私密的就使用内部存储。
Environment.getExternalStorageDirectory() 方法得到的是内置存储目录的根路径目录,读写需要权限,不会随着应用卸载删除
Environment.getExternalStoragePublicDirectory() 方法得到的是内置存储目录根路径下的特定类型文件的公共目录,读写需要权限,不会随着应用卸载删除
注意,内置存储中 /Android/data/packagenaem/ 路径的读写 Android 版本不同,需要权限不同,所以开发时应始终声明读写权限

三、外置SD存储卡

支持外置SD存储卡的机器,可以由 ContextCompat 的 getExternalFilesDirs() 方法得到所有存储根目录下 /Android/data/packagename/files 路径的数组,如果该方法第二个参数不为 null 则会再创建相应子级文件夹。再根据数组遍历,即可操作相应的存储路径进行读写。4.4及之后该操作不需要声明读写权限。
File[] files = ContextCompat.getExternalFilesDirs(this, “”);

注意:

通过该方法得内置存储卡的路径,可以对根据 getParent 系列方法可以得到上一级的路径进行读写操作,但需要权限
通过该方法得外置SD存储卡的路径,但是不可以对根据 getpParent 系列方法得到的上级路径进行写,如果写会报没有权限异常,即使声明写权限也没用。声明读权限后可正常进行读操作。
内置和外置SD存储卡中 Android/data/packagename 目录,都会在应用程序详情中清除数据和应用卸载时被删除。

作者:renxuelong
链接:https://www.jianshu.com/p/d5945c726182
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

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

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

相关文章

git常用命令及冲突解决

2019独角兽企业重金招聘Python工程师标准>>> git常用命令 git config --global user.name chenhongjiang git config --global user.email 123qq.com git init 建立厂库 git status 查看状态 git add . 添加当前目录 git add a.php 添加文件…

C 语言常见问题集

从 http://c-faq-chn.sourceforge.net/ccfaq/index.html 转载过来,学习C的好助手。 目录1. 前言2. 声明和初始化 2.1 我如何决定使用那种整数类型?2.2 64 位机上的 64 位类型是什么样的?2.3 怎样定义和声明全局变量和函数最好?2.4…

【题解】quake

【题解】\(quake\) 题目大意 我们共有报酬\(f\)元,一条边有它的价值\(w_i\),有它的建造时间\(t_i\)。要求建一些边,生成一颗树。求最大的利润率。 数据范围 \(n\le 400\) \(m\le10000\) \(Solution\) 实际上\(n,m\)出到\(\le 100000\)应该也是没问题的。…

Android应用开发——service连接泄露异常:android.app.ServiceConnectionLeaked: that was originally bound here

在做service开发过程中,大部分可能会遇到以下异常,该异常仅通过log输出,并不会导致app crash。 E/ActivityThread: Activity com.example.image.all_samples.Main2Activity has leaked ServiceConnection com.example.image.all_samples.Mai…

Linux more命令、Linux rhmask命令

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 Linux more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按…

从零开始学习PYTHON3讲义(二)把Python当做计算器

《从零开始PYTHON3》第二讲 上一讲我们说过了如何启动Python IDLE集成开发学习环境,macOS/Linux都可以在命令行执行idle3。Windows则从开始菜单中去寻找IDLE程序的图标。 上一讲我们还见到了Python的两种工作模式,交互模式和程序模式。 通常在一个大型的…

Tranquility

本页目录与Kafka集群交互Druid使用Tranquility Kafka本文以Kafka为例,介绍在E-MapReduce中如何使用Tranquility从Kafka集群采集数据,并实时推送至Druid集群。 Tranquility是一个以push方式向Druid实时发送数据的应用。它替用户解决了分区、多副本、服务发…

Iot相关杂烩

人工智能就像人的大脑,而 IoT 就像人的神经网络 1)在天空中巨大的鸟群里,每一只鸟儿都实时判断自己和四周同伴的距离。这时,它们各自都是一个物联网节点。2)这些“节点”并不是简单地收集数据,而是在实时计…

水滴石穿C语言之指针、数组和函数

基本解释   1、指针的本质是一个与地址相关的复合类型,它的值是数据存放的位置(地址);数组的本质则是一系列的变量。   2、数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持…

告诉你银行在年底为存储做的小动作

25年前,银行的存款利率是10.98%,可谓巅峰时刻。15年前,银行的存款利率开始下降,降到了8%的利率。 到了5年前,银行的存款利率毫无回转之势,直线下降到了5%的利率。 而如今,我们无可奈何地接受了2…

爬虫学习(五)——百度贴吧的爬取

import osimport timeimport urllib.requestimport urllib.parse# 输入目标页码和吧名def header(): url "https://tieba.baidu.com/f?" baming input("请输入要爬取的吧名") start_page int(input("请输入起始页")) end_page …

什么是嵌入式设备?/ 嵌入式设备的定义

什么是嵌入式设备?/ 嵌入式设备的定义 区别于通用计算机的其他设备都可以称之为嵌入式设备 (个人电脑,服务器) 一段时期内,必备的硬件配置。 嵌入式开发包括哪些部分: 底层驱动开发: 关键字…

Linux mv命令、Linux cp命令、Linux scp命令

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 Linux mv命令用来为文件或目录改名、或将文件或目录移入其它位置。 语法 mv [options] source dest mv [options] source... director…

创业者谈:畏惧失败,但也要拥抱失败

摘要:本文作者为Paydirt创始人Tristan Gamilis,他在文中分享了如何面对创业过程中的失败。作为一个创业者,开始的时候并非全才,很多知识都是经历了创业中的失败,摸爬滚打之后才学会的。所以,我们在创业过程…

基于STM32F4移植W5500官方驱动库ioLibrary_Driver(转)

源: 基于STM32F4移植W5500官方驱动库ioLibrary_Driver 参考: 基于STM32W5500 的Ethernet和Internet移植 Upgrade W5500 Throughput on Nucleo STM32F401RE Using SPI DMA

redis 资料

redis是什么: Redis is an open source, BSD licensed, advanced key-value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets. redis是开源,BSD许可,高级的key-value存储系统. 可以用来存储字…

Android应用开发——onStop的调用时机

onStop的调用时机,网上搜索到的说法大概是:“ onStop的调用是“The activity is no longer visible”,也就是完全不可见的时候调用的,这个完全不可见真的就是指视觉上的完全看不到而已,无论是按home键返回桌面&#xf…

UnaryOperator函数式接口

2019独角兽企业重金招聘Python工程师标准>>> 这是一个函数式接口&#xff0c;因此可以用作lambda表达式或方法引用的赋值目标。 可以看到UnaryOperator<T>继承了Function<T,T>接口&#xff0c;这里可是两个T,T,还增加了static修饰的identity()方法。 然…

从程序员到项目经理

推荐研发工程师必看的内容 从程序员到项目经理 从程序员到项目经理”&#xff0c;这个标题让我想起了很久以前一本书的名字《从Javascript到Java》。然而&#xff0c;从Javascript到Java充其量只是工具的更新&#xff0c;而从程序员到项目经理&#xff0c;却是一个脱胎换骨的过…

linux--命令rcp和scp

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 rcp代表“remote file copy”&#xff08;远程文件拷贝&#xff09;。该命令用于在计算机之间拷贝文件。rcp命令有两种格式。第一种格式…