FileUnitls一個(gè)讀寫安卓文件的類


import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;

import com.blankj.utilcode.util.FileUtils;
import com.bw.system.daomain.HomeAppBean;
import com.bw.system.daomain.SignatureBean;
import com.bw.system.daomain.SignaturePersonBean;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OptionalDataException;
import java.io.OutputStream;
import java.io.StreamCorruptedException;
import java.nio.channels.FileChannel;
import java.util.ArrayList;
import java.util.List;

/*
 *@Auther:CC
 *@Date: 2019/10/19
 *@Time:15:55
 *@Description:${文件工具類}
 * */public class FilesUntils {
    /**
     * 獲取文件夾下有圖片的集合
     *
     * @return
     */
    public static List<String> getImagePathFromSD(String filePath) {
        // 圖片列表
        List<String> imagePathList = new ArrayList<String>();
        // 得到sd卡內(nèi)image文件夾的路徑   File.separator(/)
        //String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/leader/signature";
        // 得到該路徑文件夾下所有的文件
        File fileAll = new File(filePath);
        File[] files = fileAll.listFiles();
        // 將所有的文件存入ArrayList中,并過濾所有圖片格式的文件
        for (int i = 0; i < files.length; i++) {
            File file = files[i];
            if (checkIsImageFile(file.getPath())) {
                imagePathList.add(file.getPath());
            }
        }
        // 返回得到的圖片列表
        return imagePathList;
    }

    /**
     * 檢查擴(kuò)展名甸鸟,得到圖片格式的文件
     *
     * @param fName 文件名
     * @return
     */
    @SuppressLint("DefaultLocale")
    private static boolean checkIsImageFile(String fName) {
        boolean isImageFile = false;
        // 獲取擴(kuò)展名
        String FileEnd = fName.substring(fName.lastIndexOf(".") + 1,
                fName.length()).toLowerCase();
        if (FileEnd.equals("jpg") || FileEnd.equals("png") || FileEnd.equals("gif")
                || FileEnd.equals("jpeg") || FileEnd.equals("bmp")) {
            isImageFile = true;
        } else {
            isImageFile = false;
        }
        return isImageFile;
    }

    /**
     * 刪除文件斤儿,可以是文件或文件夾
     *
     * @param delFile 要?jiǎng)h除的文件夾或文件名
     * @return 刪除成功返回true祟滴,否則返回false
     */
    public static boolean delete(String delFile) {
        File file = new File(delFile);
        if (!file.exists()) {
            Log.d("FilesUntils", "刪除文件失敗:" + delFile + "不存在檬寂!");
            return false;
        } else {
            if (file.isFile())
                return deleteSingleFile(delFile);
            else
                return deleteDirectory(delFile);
        }
    }

    /**
     * 刪除單個(gè)文件
     *
     * @param filePath$Name 要?jiǎng)h除的文件的文件名
     * @return 單個(gè)文件刪除成功返回true,否則返回false
     */
    public static boolean deleteSingleFile(String filePath$Name) {
        File file = new File(filePath$Name);
        // 如果文件路徑所對(duì)應(yīng)的文件存在,并且是一個(gè)文件,則直接刪除
        if (file.exists() && file.isFile()) {
            if (file.delete()) {
                Log.e("--Method--", "Copy_Delete.deleteSingleFile: 刪除單個(gè)文件" + filePath$Name + "成功申尤!");
                return true;
            } else {
                Log.d("FilesUntils", "刪除單個(gè)文件" + filePath$Name + "失敗子眶!");
                return false;
            }
        } else {
            Log.d("FilesUntils", "刪除單個(gè)文件失斊倌:" + filePath$Name + "不存在!");
            return false;
        }
    }

    /**
     * 刪除目錄及目錄下的文件
     *
     * @param filePath 要?jiǎng)h除的目錄的文件路徑
     * @return 目錄刪除成功返回true臭杰,否則返回false
     */
    public static boolean deleteDirectory(String filePath) {
        // 如果dir不以文件分隔符結(jié)尾粤咪,自動(dòng)添加文件分隔符
        if (!filePath.endsWith(File.separator))
            filePath = filePath + File.separator;
        File dirFile = new File(filePath);
        // 如果dir對(duì)應(yīng)的文件不存在,或者不是一個(gè)目錄渴杆,則退出
        if ((!dirFile.exists()) || (!dirFile.isDirectory())) {
            Log.d("FilesUntils", "刪除目錄失斄戎Α:" + filePath + "不存在!");
            return false;
        }
        boolean flag = true;
        // 刪除文件夾中的所有文件包括子目錄
        File[] files = dirFile.listFiles();
        for (File file : files) {
            // 刪除子文件
            if (file.isFile()) {
                flag = deleteSingleFile(file.getAbsolutePath());
                if (!flag)
                    break;
            }
            // 刪除子目錄
            else if (file.isDirectory()) {
                flag = deleteDirectory(file
                        .getAbsolutePath());
                if (!flag)
                    break;
            }
        }
        if (!flag) {
            Log.d("FilesUntils", "刪除目錄失敶沤薄囊拜!");
            return false;
        }
        // 刪除當(dāng)前目錄
        if (dirFile.delete()) {
            Log.e("--Method--", "Copy_Delete.deleteDirectory: 刪除目錄" + filePath + "成功!");
            return true;
        } else {
            Log.d("FilesUntils", "刪除目錄:" + filePath + "失敱却睢冠跷!");
            return false;
        }
    }

    /**
     * 讀取sd卡文件里的集合
     *
     * @param fileName 文件名
     * @return
     */
    @SuppressWarnings("unchecked")
    public static List<HomeAppBean> readListFromSdCard(String fileName) {
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {  //檢測(cè)sd卡是否存在
            List<HomeAppBean> list;
            File sdCardDir = Environment.getExternalStorageDirectory();
            File sdFile = new File(sdCardDir, fileName);
            try {
                FileInputStream fis = new FileInputStream(sdFile);
                ObjectInputStream ois = new ObjectInputStream(fis);
                list = (List<HomeAppBean>) ois.readObject();
                fis.close();
                ois.close();
                return list;
            } catch (StreamCorruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return null;
            } catch (OptionalDataException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return null;
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return null;
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return null;
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return null;
            }
        } else {
            return null;
        }
    }

    /**
     * 讀取文件
     *
     * @param fileName
     * @return
     */
    public static List<SignaturePersonBean> readTemporaryList(String fileName) {
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {  //檢測(cè)sd卡是否存在
            List<SignaturePersonBean> list;
            File sdCardDir = Environment.getExternalStorageDirectory();
            File sdFile = new File(sdCardDir, fileName);
            try {
                FileInputStream fis = new FileInputStream(sdFile);
                ObjectInputStream ois = new ObjectInputStream(fis);
                list = (List<SignaturePersonBean>) ois.readObject();
                fis.close();
                ois.close();
                return list;
            } catch (StreamCorruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return null;
            } catch (OptionalDataException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return null;
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return null;
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return null;
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return null;
            }
        } else {
            return null;
        }
    }

    /**
     * 寫入集合到Sd卡文件
     *
     * @param fileName
     * @param list
     * @return
     */
    public static boolean writeListIntoSDcard(String fileName, List<HomeAppBean> list) {
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            File sdCardDir = Environment.getExternalStorageDirectory();//獲取sd卡目錄
            File sdFile = new File(sdCardDir, fileName);
            try {
                FileOutputStream fos = new FileOutputStream(sdFile);
                ObjectOutputStream oos = new ObjectOutputStream(fos);
                oos.writeObject(list);//寫入
                fos.close();
                oos.close();
                return true;
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return false;
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return false;
            }
        } else {
            return false;
        }
    }

    /**
     * 保存文件到集合Sd卡
     *
     * @param fileName
     * @param list
     * @return
     */
    public static boolean saveListtoSDcard(String fileName, List<SignaturePersonBean> list) {
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            File sdCardDir = Environment.getExternalStorageDirectory();//獲取sd卡目錄
            File sdFile = new File(sdCardDir, fileName);
            try {
                FileOutputStream fos = new FileOutputStream(sdFile);
                ObjectOutputStream oos = new ObjectOutputStream(fos);
                oos.writeObject(list);//寫入
                fos.close();
                oos.close();
                return true;
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return false;
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return false;
            }
        } else {
            return false;
        }
    }

    /**
     * bipmap轉(zhuǎn)文件保存到sd卡
     *
     * @param bitmap
     * @throws IOException
     */
    private void saveBitmap(Bitmap bitmap, String Filepath,Context context) throws IOException {
        File file = new File(Filepath);
        if (file.exists()) {
            file.delete();
        }
        FileOutputStream out;
        try {
            out = new FileOutputStream(file);
            if (bitmap.compress(Bitmap.CompressFormat.PNG, 100, out)) {
                out.flush();
                out.close();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        scanPhoto(context, Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "一級(jí)目錄" + File.separator + "二級(jí)目錄" + File.separator + ".PNG");
    }

    /**
     * 讓Gallery相冊(cè)上能馬上看到該圖片
     */
    private static void scanPhoto(Context ctx, String imgFileName) {
        Intent mediaScanIntent = new Intent(
                Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
        File file = new File(imgFileName);
        Uri contentUri = Uri.fromFile(file);
        mediaScanIntent.setData(contentUri);
        ctx.sendBroadcast(mediaScanIntent);
    }

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蜜托,更是在濱河造成了極大的恐慌抄囚,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件橄务,死亡現(xiàn)場(chǎng)離奇詭異幔托,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蜂挪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門重挑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人棠涮,你說(shuō)我怎么就攤上這事谬哀。” “怎么了故爵?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵玻粪,是天一觀的道長(zhǎng)隅津。 經(jīng)常有香客問我诬垂,道長(zhǎng),這世上最難降的妖魔是什么伦仍? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任结窘,我火速辦了婚禮,結(jié)果婚禮上充蓝,老公的妹妹穿的比我還像新娘隧枫。我一直安慰自己,他們只是感情好谓苟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布官脓。 她就那樣靜靜地躺著,像睡著了一般涝焙。 火紅的嫁衣襯著肌膚如雪卑笨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天仑撞,我揣著相機(jī)與錄音赤兴,去河邊找鬼。 笑死隧哮,一個(gè)胖子當(dāng)著我的面吹牛桶良,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沮翔,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼陨帆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起疲牵,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤岸浑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后瑰步,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體矢洲,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年缩焦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了读虏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡袁滥,死狀恐怖盖桥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情题翻,我是刑警寧澤揩徊,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站嵌赠,受9級(jí)特大地震影響塑荒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜姜挺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一齿税、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧炊豪,春花似錦凌箕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至缺虐,卻和暖如春芜壁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背志笼。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工沿盅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人纫溃。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓腰涧,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親紊浩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子窖铡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 這周早起的第二天4點(diǎn)4分疗锐。 又是自然醒,發(fā)現(xiàn)醒來(lái)也差不多4點(diǎn) 有意思费彼,完全不用上鬧鐘 昨天去了一條命滑臊,沒辦法,應(yīng)酬...
    隨便天天想想閱讀 220評(píng)論 0 1
  • 最近迷上一本書——《夜航船》箍铲,張岱所著雇卷,它是三百年前的百科全書,用現(xiàn)在的話來(lái)說(shuō)就是古代文學(xué)常識(shí)(看這本書的時(shí)候經(jīng)常...
    念黑不念白閱讀 1,024評(píng)論 0 1
  • ▼ 觀點(diǎn)如潮水逆流 唯獨(dú)心聲不息 文|Jason 哐哐颠猴、哐哐关划、哐哐……火車在快速行駛當(dāng)中,這個(gè)號(hào)稱陸上最安全的交通...
    壹詫閱讀 193評(píng)論 0 0
  • 明天我要到職院去給14歲到19歲的女生講課翘瓮,有四百多名學(xué)生參加贮折,是講青春期的健康教育。這方面的內(nèi)容我講過多次资盅,基本...
    精進(jìn)的醫(yī)生閱讀 1,107評(píng)論 56 60