Android总结 - 保存数据

本文详细介绍了Android中如何使用内部和外部存储器保存数据。内部存储器为应用提供私有空间,文件在应用卸载时会被删除,主要方法包括openFileOutput、openFileInput等。外部存储器则允许全局读取,可被用户修改,包括公共目录和应用私有目录,需要先申请权限。
摘要由CSDN通过智能技术生成

使用内部存储器

我们可以直接保存文件在内部存储器上,默认情况下保存在内部存储器上的文件是该应用私有的并且其他应用不能访问。当这个应用被删除之后,这些文件会被删除 。
应用的内部存储器数据保存在/data/data/package-name/ 目录下。

Context提供的几个主要方法:

  • openFileOutput() :打开与应用包名关联的私有文件进行写操作,如果文件不存在会自动创建。(文件地址:/data/data/package-name/files/file_name)
  • openFileInput() :打开与应用包名关联的私有文件进行读操作。(文件地址:/data/data/package-name/files/file_name)
  • getCacheDir():返回应用在文件系统上指定的缓存目录。当存储空间不足的时候,这个目录里的文件会被删除。最好自己进行缓存文件的清理,需要设置一个合理的最大值,比如1M。(返回值:/data/data/package-name/cache/file_name)
  • getFilesDir():返回存放openFileOutput文件的目录。(返回值:/data/data/my.android.demo/files)
  • getDir(String name, int mode):在应用内部存储中创建或打开一个目录。(返回值:/data/data/my.android.demo/name)
  • deleteFile(String name):删除内部存储中的一个文件。
  • fileList():返回文件目录中所有文件名。(返回/data/data/package-name/files/ 目录下的文件组成的数组)

使用外部存储器

外部存储上的文件是全局可读的,可以被用户修改,并且可以通过USB传输到电脑上,大部分情况就是指SD card。

1. 先申请权限。

<manifest ...>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    ...
</manifest>

2. 检查外部存储器的状态,是否可用

/* 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;
}

3.使用public 公开目录,这些目录是共享的,比如 DIRECTORY_MUSIC, DIRECTORY_PICTURES, DIRECTORY_RINGTONES。
通过Environment.getExternalStoragePublicDirectory()可以获取public目录。

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;
}

4. 使用应用私有目录, 应用在SD card上自己的目录。应用卸载后,这个目录会被删除。Media Scanner不会扫描这些目录,所以不能通过MediaStore content provider来查找。
使用Contenxt提供的getExternalFilesDir()来获取目录,这个方法同样需要指定一个type参数(比如 DIRECTORY_MOVIES),传null的话就是根目录。 (目录路径:/storage/emulated/0/Android/data/my.android.demo/files)

    // Create a path where we will place our private file on external
    // storage.
    File file = new File(getExternalFilesDir(null), "DemoFile.jpg");

5. 保存cache文件

通过Context提供的getExternalCacheDir()可以访问保存cache文件的外部存储器目录。(目录路径:/storage/emulated/0/Android/data/my.android.demo/cache/)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值