android 文件存储基础
要搞清楚文件存储首先需要知道内存 和外存的定义
内存:
在任何时候都是可用的,
默认情况你存储的文件只有你自己的应用可用访问
当用户卸载app时候,系统删除所有内存中保存的文件
外存:不总是可以使用的,当用户插上电脑将手机作为u盘时候,你的应用将不可以使用这些文件。并且用户可用删除的。
外存中的文件是全局可读的,文件有时候可以被用户删除。
当用户卸载app时候,卸载的文件仅仅是函数getExternalFileDir得到目录下的文件。其他文件不会删除。
外存中的文件应该是可以和其他app可以访问,也允许用户去访问的。
App安装默认是在内存中,你也可以在Mainfest文件中指定安装位置通过android:installLocation属性。
读写外部存储文件需要在mainfest中声明权限
写权限
<manifest ...>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
...
</manifest>
读权限:
<manifest ...>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
...
</manifest>
在内存中保存文件不需要权限,你的应用总是可以读写内存中的文件。
保存文件在内存中你需要得到内存的目录:
getFilesDir() 返回内存中你的app目录
getCacheDir() 得到app临时缓存文件的目录,你需要设定一个文件缓存大小,当你不需要文件的时候一定要删除他,或者你app 内存不够用时候,也可能自动删除你缓存中的文件。
创建文件的方法:
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();
}
创建缓存文件通过url
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;
}
注意:若果其他应用知道你应用的包名,应该可以访问你的内存中的文件,你需要设置文件属性为可读状态,如果你设置MODE_PRIVAT 其他app将永远访问不到你的文件。
保存文件在外存中:
因为外存不总是可用的状态,所以你在读写外存文件的时候需要提前获取外存的状态
如下代码:
/* 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;
}
/* Checks if external storage is available to at least read */
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自由访问,卸载你的app也不会卸载这里的文件,会留下来。 例如文件下载目录 图像截图目录。
私有文件:用户卸载你的应用时,也会卸载这里的数据。因为他们在外存上,所以可以被其他app和用户访问。这个文件放置临时媒体文件,或者你的应用下载的资源文件。
得到外部存储公共目录的文件夹通过getExternalStoragePublicDirectory() ,你需要指定文件类型,你要保存的数据的文件类型。例如DIRECTORY_MUSIC 或者DIRECTORY_PICTURES
得到用户的相册目录
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;
}
如果你保存的文件对你的app来说是私有的,你需要调用getExternalFilesDir()
创建自己app私有的相册
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;
}
注意:当你不确定目录名传入null 你获取的目录是外存中你应用的根目录
在你知道目录的时候需要传入文件类型,这样系统扫描的时候,可以正确识别你的文件类型。
你可以调用File类的getFreeSpace 和getTotalSpace 来得到当前文件目录可用的空间。
在外存中你可以调用file.delete()删除文件。
文件在内存中你可以调用context.deleteFile(fileName);来删除文件
注意:卸载应用的时候 会删除的目录有内存中的你app的文件,以及外部存储中getExternalFilesDir(). 目录下的文件。
android 文件存储基础相关推荐
- android 数据文件存储,实例详解Android文件存储数据方式
总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.下面通过本文给大家介绍android文件存储数据方式. 1.文件存储数据使用了java中的io操作来进行文件的保存和读取,只不 ...
- 腾讯云 TStor 统一存储通过信通院首批文件存储基础能力评测
在大数据上升为国家战略背景下,当前我国各行业.各领域正积极提升数据资源掌控能力和深度价值挖掘能力.存储作为数据基础设施建设的关键支柱,在国民经济发展过程中的重要性日益凸显 2022年6月16日,中国信 ...
- android文件存储教程,android开发基础教程—文件存储功能实现
文件存储: public class MainActivity extends Activity { EditText mname, mage; TextView mtv; @Override pro ...
- android文件存储数组,Android面试简录——文件存储
* SharedPreferences 请描述Android SDK支持哪些文件存储技术? 1.SharedPreferences保存key-value类型的数据 2.流文件存储(openFileOu ...
- android 文件存储 集合,Android 文件存储的基本使用
在Android中我们大多数情况下我们用的都是绝对路径: 文件存储位置说明: 内部存储不是内存,内部存储位于系统中很特殊的一个位置,当应用被卸载后,内部存储的文件夹也被删除,一个应用所创建的所有文件都 ...
- Android文件存储方式之openFileOutput与获取数据openFileInput
一般存储数据无非分为SP存储和数据库还有文件存储,这里我们说下文件存储openFileOutput和取出数据openFileInput 我们在一不小心退出APP如果再无退出之前不将数据保存的话数据是会 ...
- android文件体系,Android文件体系-基础
前言 对于任何一个应用来说存储肯定是必不可少的,对于很多做Android开发的同学来说可能认为文件存储很简单,但是他们未必就搞懂了他的数据到底存在了哪里,以及他的数据是否存对了地方,下面我将介绍安卓文 ...
- Android 文件存储-图片存储
因 Android1 1谷歌禁止使用requestLegacyExternalStorage ,故将存储方式分为两种方式来进行文件存储. 存储你的应用打算与其他应用共享的文件,包括媒体.文档和其他文件 ...
- 转:彻底搞懂Android文件存储---内部存储,外部存储以及各种存储路径解惑
转自:https://blog.csdn.net/u010937230/article/details/73303034 前言: 对于任何一个应用来说,无论是PC端应用还是Android应用,存储肯定 ...
最新文章
- linux yield_linux内核的一些知识点(上)
- 好事也要好做---孔子责子贡
- FreePascal - 如何在各个平台中安装CodeTyphon!
- 如何更改 Linux/Unix 登录账号的密码
- 怎样通过DOS来提取一个文件夹下所有文件的名字
- oracle开窗函数是什么,ORACLE数据库(六)-----开窗函数
- spoolsv.exe占cpu 99%的解决方法(转)
- MyBatis之Mapper动态代理开发
- C++ 用new 动态创建多维数组
- Node.js设置CORS跨域请求中多域名白名单的方法
- 色差仪软件的安装和电池充电
- oracle监听启动接着关闭,Oracle监听启动后自动关闭
- 利用SolidWorks解决方案取得健身器材市场的领先地位!
- pentaho发布报表后免登陆查看数据报表
- SIM900A GPRS GSM 基础知识
- 微信内域名如何防封,微信域名防封跳转
- Druid在有赞的实践
- 查壳去壳和加壳的使用指南
- python写文字冒险游戏手机版_用128行代码实现一个文字冒险游戏
- 物联网应用网站——设计报告
热门文章
- 一只喵的西行记-11 与大叔小萝莉的不打不相识
- android obb在哪,未解决:Android 使用obb步骤
- 50台同样配置的计算机装系统,几十台PC如何同时安装系统
- nova7可以升级成鸿蒙20系统,华为nova7升级到EMUI11,8大功能提升,带来更新体验...
- 单片机第三讲 ——中断及定时器基本知识
- Vue中updated和watch的区别
- 试戴耳钉会感染艾滋病吗?
- 客户端与服务器端交互原理(HTTP数据请求与HTTP响应)
- 计算机的dp接口在哪,主机dp接口在哪
- Rails部署云环境配置(Passenger+Apache)