Android 内部存储和外部存储

本文探讨了Android系统的内部和外部存储的概念,通过`LogicalInternalStorageTool.java`和`LogicalExternalStorageTool.java`两个关键类的分析,详细阐述了如何在Android应用中管理和操作这两种存储方式。内容包括如何读写文件、使用内置和外置存储的API以及内存卡的使用策略。
摘要由CSDN通过智能技术生成

这里写图片描述
点击查看大图

点我查看原图

LogicalInternalStorageTool.java

/**
 * Created by classichu on 2018/3/2.
 * <p>
 * 逻辑上的 Internal storage:
 * 1 总是可用的
 * 2 这里的文件默认只能被我们的app所访问。
 * 3 当用户卸载app的时候,系统会把internal内该app相关的文件都清除干净。
 * 4 Internal是我们在想确保不被用户与其他app所访问的最佳存储区域。
 * <p>
 * data 目录
 * <p>
 * 这下面的文件会在用户卸载我们的app时被系统删除
 * <p>
 * Android6.0+支持多用户 /data/user/0/<application package>
 */

public class LogicalInternalStorageTool {
   

    /**
     * /cache
     *
     * @return
     */
    @Deprecated //功能示例
    public static String getDownloadCacheDirectoryPath() {
        return Environment.getDownloadCacheDirectory().getAbsolutePath();
    }


    /**
     * /system
     */
    @Deprecated //功能示例
    public static String getRootDirectoryPath() {
        return Environment.getRootDirectory().getAbsolutePath();
    }


    /**
     * /data
     */
    @Deprecated //功能示例
    public static String getDataDirectoryPath() {
        return Environment.getDataDirectory().getAbsolutePath();
    }

    /**
     * app 的 internal 目录
     * <p>
     * /data/data/<application package>/files
     * <p>
     * miui等系统应用多开 时候
     * /data/user/0/<application package>/files
     * miui等系统应用多开 时候 小号
     * /data/user/999/<application package>/files
     *
     * @param context
     * @return
     */
    public static String getFilesDirPath(Context context) {
        return context.getFilesDir().getAbsolutePath();
    }

    /**
     * /data/data/<application package>/files/file1
     */
    @Deprecated //功能示例
    public static String getFileStreamPath(Context context) {
        return context.getFileStreamPath("file1").getAbsolutePath();
    }

    /**
     * 对于 Files 目录下的文件,通常不会通过 File 类的方式直接进行读写,而是利用一些封装过的类或函数进行操作
     * /data/data/<application package>/files/file2  的 FileInputStream
     */
    @Deprecated //功能示例
    public static FileInputStream openFileInput(Context context) {
        try {
            return context.openFileInput("file2");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 对于 Files 目录下的文件,通常不会通过 File 类的方式直接进行读写,而是利用一些封装过的类或函数进行操作
     * /data/data/<application package>/files/file2  的 FileOutputStream
     */
    @Deprecated //功能示例
    public static FileOutputStream openFileOutput(Context context) {
        try {
            return context.openFileOutput("file2", Context.MODE_PRIVATE);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 对于 Files 目录下的文件,通常不会通过 File 类的方式直接进行读写,而是利用一些封装过的类或函数进行操作
     * 删除
     */
    @Deprecated //功能示例
    public static boolean deleteFile(Context context) {
        return context.deleteFile("file2");
    }

    /**
     * 对于 Files 目录下的文件,通常不会通过 File 类的方式直接进行读写,而是利用一些封装过的类或函数进行操作
     * 查询
     */
    
Android内部路径和外部存储路径的区别在于其访问权限和存储位置。 Android内部路径是指应用程序在设备的内部存储空间中创建的路径。这个路径只能被应用程序本身访问,其他应用程序、用户或系统都无法直接访问。内部路径通常用于存储应用程序的私密数据,如缓存文件、数据库文件等。由于内部路径只能被应用程序访问,所以应用程序对其具有读写权限,并且可以在应用程序卸载时将内部路径下的数据一并删除。 而外部存储路径则是指设备上的可移动存储介质,如SD卡。这个路径是被所有应用程序以及使用设备的用户和系统共享的,因此外部存储路径的数据可以被多个应用程序共享和访问。外部存储路径通常用于存储大量的公共数据,如音频、视频、图片等。由于外部存储路径是共享的,所以应用程序对其只具有读写权限,并且应用程序卸载时不会删除外部存储路径下的数据。 需要注意的是,由于外部存储路径是被所有应用程序共享的,所以访问外部存储路径需要申请相关的权限,并且需要注意防止数据被其他应用程序非法访问或篡改。在使用外部存储路径时,还需要进行容量检测,以确保设备上有足够的可用存储空间。 综上所述,Android内部路径和外部存储路径在访问权限、存储位置和数据共享等方面存在区别。根据应用程序的需求和数据的性质,开发者可以选择合适的路径来存储和管理数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值