版权声明:本文为HaiyuKing原创文章,转载请注明出处!

前言

创建缓存目录

    public static String APP_CACHE = "";//   /storage/emulated/0/Android/data/{package}/cache/
    public static String IMAGE = "";//       /storage/emulated/0/Android/data/{package}/cache/image
    public static String CAMERA = "";//      /storage/emulated/0/Android/data/{package}/cache/camera
    public static String GIF = "";//         /storage/emulated/0/Android/data/{package}/cache/gif
    public static String FUND = "";//        /storage/emulated/0/Android/data/{package}/cache/fund
    public static String CRASH = "";//       /storage/emulated/0/Android/data/{package}/files/crash
    public static String PLAYER = "";//      /storage/emulated/0/Android/data/{package}/files/player
    public static String P2P = "";//         /storage/emulated/0/Android/data/{package}/files/p2p
    public static String DOWNLOAD = "";//    /storage/emulated/0/Android/data/{package}/files/download或者自定义的目录

AppDir【创建缓存目录】【建议使用这个工具类】  AppDir【创建缓存目录】【建议使用这个工具类】

注意:因为创建目录都是在/storage/emulated/0/Android/data/{package}目录中,所以本来不需要权限;但是下载目录有可能需要使用SD卡中的自定义目录,所以还是需要权限的。【20191124,不需要权限】

效果图

暂不需要

代码分析

AppDir : 自定义需要创建的缓存目录

FileUtils : 创建目录、删除目录下所有文件、获取目录下第一个文件path

使用步骤

一、项目组织结构图

AppDir【创建缓存目录】【建议使用这个工具类】

注意事项:

1、  导入类文件后需要change包名以及重新import R文件路径

2、  Values目录下的文件(strings.xml、dimens.xml、colors.xml等),如果项目中存在,则复制里面的内容,不要整个覆盖

二、导入步骤

将AppDir、FileUtils复制到项目中

【20191124更新】

package com.why.project.appdirdemo.utils;

import android.content.Context;
import android.os.Build;
import android.os.Environment;

import java.io.File;

/**
 * Created by HaiyuKing
 * Used 创建缓存目录
 * 安卓手机的存储分为 2 部分,内部存储 ( Internal ) 和外部存储( External ):
 * 内部存储是指系统的存储空间,没有root是访问不到的呦亲,比如sharedPreferenced或者database都是保存在这里面的。
 * 外部存储,又分为 2 部分:【操作外部存储你首先需要以下权限:WRITE_EXTERNAL_STORAGE,不过Android Q之后不再需要申请该权限】
 * 机器自带的存储【ExternalStorage】,也就是手机厂商常说的16G,32G,64G之类的存储空间。
 * SD卡,其实正确叫法应该是TF卡,就是可插拔的那个小东西。
 * 参考资料:https://www.jianshu.com/p/116025bf51f7
 */

public class AppDir {

    public static final String TAG = AppDir.class.getName();

    private static Context mContext;

    enum Type {
        CACHE,FILE;
    }

    public static String APP_CACHE = "";//   /storage/emulated/0/Android/data/{package}/cache/
    public static String IMAGE = "";//       /storage/emulated/0/Android/data/{package}/cache/image
    public static String CAMERA = "";//      /storage/emulated/0/Android/data/{package}/cache/camera
    public static String GIF = "";//         /storage/emulated/0/Android/data/{package}/cache/gif
    public static String FUND = "";//        /storage/emulated/0/Android/data/{package}/cache/fund
    public static String CRASH = "";//       /storage/emulated/0/Android/data/{package}/files/crash
    public static String PLAYER = "";//      /storage/emulated/0/Android/data/{package}/files/player
    public static String P2P = "";//         /storage/emulated/0/Android/data/{package}/files/p2p
    public static String DOWNLOAD = "";//    /storage/emulated/0/Android/data/{package}/files/download或者自定义的目录

    public static AppDir getInstance(Context mContext){
        AppDir appDir = new AppDir();
        appDir.mContext = mContext;
        initDatas();
        return appDir;
    }

    private static void initDatas(){
        APP_CACHE = createPath("APP_CACHE", 0, "", Type.CACHE);
        IMAGE =createPath("IMAGE", 1, "image", Type.CACHE);
        CAMERA = createPath("CAMERA", 2, "camera", Type.CACHE);
        GIF = createPath("GIF", 3, "gif", Type.CACHE);
        FUND = createPath("FUND", 4, "fund", Type.CACHE);
        CRASH = createPath("CRASH", 5, "crash", Type.FILE);
        PLAYER = createPath("PLAYER", 6, "player", Type.FILE);
        P2P = createPath("P2P", 8, "p2p", Type.FILE);
        //DOWNLOAD = createDownloadPath();//20191124,该方法不再使用
        DOWNLOAD = createPath("download", 9, "download", Type.FILE);
    }

    private static String createPath(String name, int index, String subpath, Type p) {
        String cachePath = mContext.getExternalCacheDir() + File.separator;//一般存放临时缓存数据
        String filePath = mContext.getExternalFilesDir(null) + File.separator;//一般放一些长时间保存的数据
        String path = p == Type.CACHE ? cachePath + subpath : filePath + subpath;

        //Log.e(TAG,"{AppDir}name="+name+";path="+path);
        FileUtils.makeDirs(path);//创建目录
        return path;
    }

    /**
     * 20191124
     * 这个方法不建议使用,留在这里作为备份*/
    private static String createDownloadPath() {
        String path = "";
        // 判断sd卡是否存在
        boolean sdCardExit = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
        //Log.e(TAG,"{AppDir}sdCardExit="+sdCardExit);
        if (sdCardExit) {
            if(Build.VERSION.SDK_INT >= 19) {//如果版本大于19,则直接在缓存目录中创建download目录
                File[] files = mContext.getExternalFilesDirs("download");
                if(files != null && files.length >= 1 && files[0] != null) {
                    path = files[0].getAbsolutePath();//  /storage/emulated/0/Android/data/{package}/files/download
                }
            }else {
                path = Environment.getExternalStorageDirectory() + File.separator + "why/download";//使用自定义的download目录
            }
        }else{
            path = Environment.getDataDirectory() + File.separator + "why/download";//使用自定义的download目录
        }
        //Log.e(TAG,"{AppDir}DOWNLOAD"+";path="+path);
        FileUtils.makeDirs(path);//创建目录
        return path;
    }


}
AppDir

相关文章:

  • 2022-12-23
  • 2021-10-30
  • 2022-01-08
  • 2021-12-21
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-03
  • 2021-08-22
  • 2022-02-15
  • 2022-12-23
相关资源
相似解决方案