// Path: utilslibrary/src/main/java/com/devin/UtilManager.java
// public class UtilManager {
// 
//     private static Context mContext;
// 
//     /**
//      * 初始化工具类集合
//      * @param context  context
//      */
//     public static void init(Context context) {
//         mContext = context.getApplicationContext();
//     }
// 
//     public static Context getContext() {
//         return mContext;
//     }
// }


import android.os.Environment;
import android.os.StatFs;
import com.devin.UtilManager;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
package com.devin.util;




/**
 * <p>Description: 关于File的一些工具类
 * <p>Company：
 * <p>Email:bjxm2013@163.com
 * <p>Created by Devin Sun on 2017/4/25.
 */
public class FileUtils {

    /**
     * 获取系统存储路径
     *
     * @return 系统存储路径
     */
    public static String getRootDirPath() {
        return Environment.getRootDirectory().getAbsolutePath();
    }

    /**
     * 获取跟目录下的 Download 目录
     * @return
     */
    public static String getDownloadPath() {
        return Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
    }

    /**
     * 获取跟目录下的 DCIM 目录
     * @return
     */
    public static String getDCIMPath() {
        return Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath();
    }

    /**
     * 查询设备是否有不可被移除的sd卡
     *
     * @return true 有，false 没有
     */
    public static boolean hasSDCard() {

        return Environment.getExternalStorageState()
                .equals(Environment.MEDIA_MOUNTED) && !Environment.isExternalStorageRemovable();
    }

    /**
     * 得到SD的目录路径
     *
     * @return SD的目录路径
     */
    public static String getSDPath() {
        return Environment.getExternalStorageDirectory().getAbsolutePath();
    }

    /**
     * 获取SD卡的剩余容量 单位byte
     *
     * @return 如果有sd卡 则返回实际剩余容量，没有则返回 0
     */
    public static long getSDAvailableSize() {

        if (hasSDCard()) {
            StatFs stat = new StatFs(getSDPath());
            // 获取空闲的数据块的数量
            long availableBlocks = stat.getAvailableBlocks() - 4;
            // 获取单个数据块的大小（byte）
            long freeBlocks = stat.getAvailableBlocks();
            return freeBlocks * availableBlocks;
        }
        return 0;
    }

    /**
     * 得到SDCard/Android/data/应用的包名/files/ 目录
     *
     * @return SDCard/Android/data/应用的包名/files/目录 未获取到则返回null
     */
    public static String getExternalFilesDir() {
        String path = null;
// Path: utilslibrary/src/main/java/com/devin/UtilManager.java
// public class UtilManager {
// 
//     private static Context mContext;
// 
//     /**
//      * 初始化工具类集合
//      * @param context  context
//      */
//     public static void init(Context context) {
//         mContext = context.getApplicationContext();
//     }
// 
//     public static Context getContext() {
//         return mContext;
//     }
// }


// Path: utilslibrary/src/main/java/com/devin/util/FileUtils.java
import android.os.Environment;
import android.os.StatFs;
import com.devin.UtilManager;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

package com.devin.util;




/**
 * <p>Description: 关于File的一些工具类
 * <p>Company：
 * <p>Email:bjxm2013@163.com
 * <p>Created by Devin Sun on 2017/4/25.
 */
public class FileUtils {

    /**
     * 获取系统存储路径
     *
     * @return 系统存储路径
     */
    public static String getRootDirPath() {
        return Environment.getRootDirectory().getAbsolutePath();
    }

    /**
     * 获取跟目录下的 Download 目录
     * @return
     */
    public static String getDownloadPath() {
        return Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
    }

    /**
     * 获取跟目录下的 DCIM 目录
     * @return
     */
    public static String getDCIMPath() {
        return Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath();
    }

    /**
     * 查询设备是否有不可被移除的sd卡
     *
     * @return true 有，false 没有
     */
    public static boolean hasSDCard() {

        return Environment.getExternalStorageState()
                .equals(Environment.MEDIA_MOUNTED) && !Environment.isExternalStorageRemovable();
    }

    /**
     * 得到SD的目录路径
     *
     * @return SD的目录路径
     */
    public static String getSDPath() {
        return Environment.getExternalStorageDirectory().getAbsolutePath();
    }

    /**
     * 获取SD卡的剩余容量 单位byte
     *
     * @return 如果有sd卡 则返回实际剩余容量，没有则返回 0
     */
    public static long getSDAvailableSize() {

        if (hasSDCard()) {
            StatFs stat = new StatFs(getSDPath());
            // 获取空闲的数据块的数量
            long availableBlocks = stat.getAvailableBlocks() - 4;
            // 获取单个数据块的大小（byte）
            long freeBlocks = stat.getAvailableBlocks();
            return freeBlocks * availableBlocks;
        }
        return 0;
    }

    /**
     * 得到SDCard/Android/data/应用的包名/files/ 目录
     *
     * @return SDCard/Android/data/应用的包名/files/目录 未获取到则返回null
     */
    public static String getExternalFilesDir() {
        String path = null;
        File file = UtilManager.getContext().getExternalFilesDir(null);