要搞清楚文件存储首先需要知道内存 和外存的定义

内存:

在任何时候都是可用的,

默认情况你存储的文件只有你自己的应用可用访问

当用户卸载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 文件存储基础相关推荐

  1. android 数据文件存储,实例详解Android文件存储数据方式

    总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.下面通过本文给大家介绍android文件存储数据方式. 1.文件存储数据使用了java中的io操作来进行文件的保存和读取,只不 ...

  2. 腾讯云 TStor 统一存储通过信通院首批文件存储基础能力评测

    在大数据上升为国家战略背景下,当前我国各行业.各领域正积极提升数据资源掌控能力和深度价值挖掘能力.存储作为数据基础设施建设的关键支柱,在国民经济发展过程中的重要性日益凸显 2022年6月16日,中国信 ...

  3. android文件存储教程,android开发基础教程—文件存储功能实现

    文件存储: public class MainActivity extends Activity { EditText mname, mage; TextView mtv; @Override pro ...

  4. android文件存储数组,Android面试简录——文件存储

    * SharedPreferences 请描述Android SDK支持哪些文件存储技术? 1.SharedPreferences保存key-value类型的数据 2.流文件存储(openFileOu ...

  5. android 文件存储 集合,Android 文件存储的基本使用

    在Android中我们大多数情况下我们用的都是绝对路径: 文件存储位置说明: 内部存储不是内存,内部存储位于系统中很特殊的一个位置,当应用被卸载后,内部存储的文件夹也被删除,一个应用所创建的所有文件都 ...

  6. Android文件存储方式之openFileOutput与获取数据openFileInput

    一般存储数据无非分为SP存储和数据库还有文件存储,这里我们说下文件存储openFileOutput和取出数据openFileInput 我们在一不小心退出APP如果再无退出之前不将数据保存的话数据是会 ...

  7. android文件体系,Android文件体系-基础

    前言 对于任何一个应用来说存储肯定是必不可少的,对于很多做Android开发的同学来说可能认为文件存储很简单,但是他们未必就搞懂了他的数据到底存在了哪里,以及他的数据是否存对了地方,下面我将介绍安卓文 ...

  8. Android 文件存储-图片存储

    因 Android1 1谷歌禁止使用requestLegacyExternalStorage ,故将存储方式分为两种方式来进行文件存储. 存储你的应用打算与其他应用共享的文件,包括媒体.文档和其他文件 ...

  9. 转:彻底搞懂Android文件存储---内部存储,外部存储以及各种存储路径解惑

    转自:https://blog.csdn.net/u010937230/article/details/73303034 前言: 对于任何一个应用来说,无论是PC端应用还是Android应用,存储肯定 ...

最新文章

  1. linux yield_linux内核的一些知识点(上)
  2. 好事也要好做---孔子责子贡
  3. FreePascal - 如何在各个平台中安装CodeTyphon!
  4. 如何更改 Linux/Unix 登录账号的密码
  5. 怎样通过DOS来提取一个文件夹下所有文件的名字
  6. oracle开窗函数是什么,ORACLE数据库(六)-----开窗函数
  7. spoolsv.exe占cpu 99%的解决方法(转)
  8. MyBatis之Mapper动态代理开发
  9. C++ 用new 动态创建多维数组
  10. Node.js设置CORS跨域请求中多域名白名单的方法
  11. 色差仪软件的安装和电池充电
  12. oracle监听启动接着关闭,Oracle监听启动后自动关闭
  13. 利用SolidWorks解决方案取得健身器材市场的领先地位!
  14. pentaho发布报表后免登陆查看数据报表
  15. SIM900A GPRS GSM 基础知识
  16. 微信内域名如何防封,微信域名防封跳转
  17. Druid在有赞的实践
  18. 查壳去壳和加壳的使用指南
  19. python写文字冒险游戏手机版_用128行代码实现一个文字冒险游戏
  20. 物联网应用网站——设计报告

热门文章

  1. 一只喵的西行记-11 与大叔小萝莉的不打不相识
  2. android obb在哪,未解决:Android 使用obb步骤
  3. 50台同样配置的计算机装系统,几十台PC如何同时安装系统
  4. nova7可以升级成鸿蒙20系统,华为nova7升级到EMUI11,8大功能提升,带来更新体验...
  5. 单片机第三讲 ——中断及定时器基本知识
  6. Vue中updated和watch的区别
  7. 试戴耳钉会感染艾滋病吗?
  8. 客户端与服务器端交互原理(HTTP数据请求与HTTP响应)
  9. 计算机的dp接口在哪,主机dp接口在哪
  10. Rails部署云环境配置(Passenger+Apache)