package com.dyh.rnpicture.utils;

import android.os.Environment;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class FileUtils
{
    /**
     * 删除单个文件
     * @param   filePath    被删除文件的文件名
     * @return 文件删除成功返回true，否则返回false
     */
    public static boolean deleteFile(String filePath) {
        File file = new File(filePath);
        if (file.isFile() && file.exists()) {
            return file.delete();
        }
        return false;
    }

    /**
     * 删除文件夹以及目录下的文件
     * @param   filePath 被删除目录的文件路径
     * @return  目录删除成功返回true，否则返回false
     */
    public static boolean deleteDirectory(String filePath) {
        boolean flag = false;
        //如果filePath不以文件分隔符结尾，自动添加文件分隔符
        if (!filePath.endsWith(File.separator)) {
            filePath = filePath + File.separator;
        }
        File dirFile = new File(filePath);
        if (!dirFile.exists() || !dirFile.isDirectory()) {
            return false;
        }
        flag = true;
        File[] files = dirFile.listFiles();
        //遍历删除文件夹下的所有文件(包括子目录)
        for (int i = 0; i < files.length; i++) {
            if (files[i].isFile()) {
                //删除子文件
                flag = deleteFile(files[i].getAbsolutePath());
                if (!flag) break;
            } else {
                //删除子目录
                flag = deleteDirectory(files[i].getAbsolutePath());
                if (!flag) break;
            }
        }
        if (!flag) return false;
        //删除当前空目录
        return dirFile.delete();
    }

    /**
     *  根据路径删除指定的目录或文件，无论存在与否
     *@param filePath  要删除的目录或文件
     *@return 删除成功返回 true，否则返回 false。
     */
    public static boolean DeleteFolder(String filePath) {
        File file = new File(filePath);
        if (!file.exists()) {
            return false;
        } else {
            if (file.isFile()) {
                // 为文件时调用删除文件方法
                return deleteFile(filePath);
            } else {
                // 为目录时调用删除目录方法
                return deleteDirectory(filePath);
            }
        }
    }
    
    
    

        private String SDPATH;

        public String getSDPATH() {
            return SDPATH;
        }
        public FileUtils() {
            //得到当前外部存储设备的目录
            // /SDCARD
            SDPATH = Environment.getExternalStorageDirectory() + "/";
        }
        /**
         * 在SD卡上创建文件
         *
         * @throws IOException
         */
        public File creatSDFile(String fileName) throws IOException
        {
            File file = new File(SDPATH + fileName);
            file.createNewFile();
            return file;
        }

        /**
         * 在SD卡上创建目录
         *
         * @param dirName
         */
        public File creatSDDir(String dirName) {
            File dir = new File(SDPATH + dirName);
            dir.mkdirs();
            return dir;
        }

        /**
         * 判断SD卡上的文件夹是否存在
         */
        public boolean isFileExist(String fileName){
            File file = new File(SDPATH + fileName);
            if(file.exists()){
               return  file.delete();
            }
            return true;
        }

        /**
         * 将一个InputStream里面的数据写入到SD卡中
         */
        public File write2SDFromInput(String path,String fileName,InputStream input){
            File file = null;
            OutputStream output = null;
            try{
                creatSDDir(path);
                file = creatSDFile(path + fileName);
                output = new FileOutputStream(file);
                byte buffer [] = new byte[4 * 1024];
                while((input.read(buffer)) != -1){
                    output.write(buffer);
                }
                output.flush();
            }
            catch(Exception e){
                e.printStackTrace();
            }
            finally{
                try{
                    output.close();
                }
                catch(Exception e){
                    e.printStackTrace();
                }
            }
            return file;
        }

}
