• android开发SD卡工具类(一)


    SD卡工具类整理:

      1 package com.gzcivil.utils;
      2 
      3 import java.io.File;
      4 import java.io.FileInputStream;
      5 import java.io.FileNotFoundException;
      6 import java.io.FileOutputStream;
      7 import java.io.IOException;
      8 import java.io.InputStream;
      9 import java.io.OutputStream;
     10 import java.math.BigDecimal;
     11 
     12 import android.os.Environment;
     13 
     14 /**
     15  * SD卡工具类
     16  */
     17 public class SDTool {
     18     // 字节参考量(bt/KB/MB/GB/TB)
     19     protected final long SIZE_BT = 1024L;
     20     protected final long SIZE_KB = SIZE_BT * 1024L;
     21     protected final long SIZE_MB = SIZE_KB * 1024L;
     22     protected final long SIZE_GB = SIZE_MB * 1024L;
     23     protected final long SIZE_TB = SIZE_GB * 1024L;
     24     protected final int SACLE = 2;
     25 
     26     private static SDTool mSDTool;
     27     private final String mModuleName = this.getClass().getSimpleName();
     28     private static boolean SDCardAvailable = false; // SDCard有效状态
     29     private static String SDCardRootDir = ""; // SDCard路径
     30 
     31     private SDTool() {
     32         super();
     33         LogUtils.i(SysUtils.LOG_TAG, "创建文件夹");
     34         this.initSDTool();
     35     }
     36 
     37     public static synchronized SDTool getInstance() {
     38         if (mSDTool == null)
     39             mSDTool = new SDTool();
     40         return mSDTool;
     41     }
     42 
     43     // --------------------------get some dir path....
     44     public String getBaseDir() {
     45         return SDCardAvailable ? SDCardRootDir + SysConstants.PATH_ROOT : null;
     46     }
     47 
     48     /** 获取图片sdcard保存路径 */
     49     public String getImgDir(String urlFileName) {
     50         if (SDCardAvailable)
     51             return SDCardRootDir + SysConstants.PATH_IMAGE + urlFileName;
     52         return null;
     53     }
     54 
     55     /** 获取上传图片sdcard保存路径 */
     56     public String getUpImgDir(String urlFileName) {
     57         if (SDCardAvailable)
     58             return SDCardRootDir + SysConstants.PATH_UPIMAGE + urlFileName;
     59         return null;
     60     }
     61 
     62     /** 获取sdcard临时目录的路径 */
     63     public String getTempBase() {
     64         if (SDCardAvailable)
     65             return SDCardRootDir + SysConstants.PATH_TEMP;
     66         return null;
     67     }
     68 
     69     /** 获取sdcard下载目录的路径 */
     70     public String getDownloadBase() {
     71         if (SDCardAvailable)
     72             return SDCardRootDir + SysConstants.PATH_DOWNLOAD;
     73         return null;
     74     }
     75 
     76     /** 获取sdcard数据库目录的路径 */
     77     public String getDataBase() {
     78         if (SDCardAvailable)
     79             return SDCardRootDir + SysConstants.PATH_DATABASE;
     80         return null;
     81     }
     82 
     83     /** 获取文件在sdcard临时目录的保存路径 */
     84     public String getTempDir(String urlFileName) {
     85         if (SDCardAvailable)
     86             return SDCardRootDir + SysConstants.PATH_TEMP + urlFileName;
     87         return null;
     88     }
     89 
     90     /** 获取文件在sdcard临时目录的保存路径 */
     91     public String getTempDirUpImage(String urlFileName) {
     92         if (SDCardAvailable)
     93             return SDCardRootDir + SysConstants.PATH_UPIMAGE;
     94         return null;
     95     }
     96 
     97     /**
     98      * 根据SD卡相对路径返回绝对路径
     99      * 
    100      * @param filePath
    101      * @return
    102      */
    103     public String getSdFullPath(String filePath) {
    104         return SDCardRootDir + filePath;
    105     }
    106 
    107     // --------------------------public function....
    108     /**
    109      * SD卡可用状态检测
    110      */
    111     public static boolean isAvailable() {
    112         return SDCardAvailable;
    113     }
    114 
    115     /**
    116      * 检测文件是否存在
    117      */
    118     public boolean exists(String filePath) {
    119         return SDCardAvailable ? new File(filePath).exists() : false;
    120     }
    121 
    122     /**
    123      * 检测是否为零字节文件
    124      */
    125     public boolean emptyFile(String filePath) {
    126         return (!SDCardAvailable || new File(filePath).length() < 1) ? true : false;
    127     }
    128 
    129     /**
    130      * 根据文件名删除文件
    131      * 
    132      * @param filePath
    133      *            SDCard卡上完整路径
    134      * @return void
    135      */
    136     public void deleteFile(String filePath) {
    137         if (!SDCardAvailable || StringUtils.isEmpty(filePath))
    138             return;
    139         File file = new File(filePath);
    140         if (file.exists())
    141             file.delete();
    142     }
    143 
    144     /**
    145      * 删除指定目录下所有文件及子目录(不包含自身)
    146      * 
    147      * @param dirPath
    148      * @return
    149      * @return void
    150      */
    151     public synchronized boolean deleteDir(String dirPath) {
    152         boolean clearFlag = false;
    153         if (!SDCardAvailable) {
    154             return false;
    155         }
    156 
    157         File file = new File(dirPath);
    158         if (file.exists() && file.isDirectory()) {
    159             File[] files = file.listFiles();
    160             for (File fileItem : files) {
    161                 if (fileItem.isFile()) {
    162                     fileItem.delete();
    163                 }
    164             }
    165             clearFlag = true;
    166         }
    167         return clearFlag;
    168     }
    169 
    170     /**
    171      * 获取指定目录大小
    172      * 
    173      * @param dirPath
    174      * @return
    175      */
    176     public long getPathSize(String dirPath) {
    177         long size = 0;
    178         if (!SDCardAvailable)
    179             return size;
    180 
    181         File file = new File(dirPath);
    182         if (file.exists() && file.isDirectory()) {
    183             File[] files = file.listFiles();
    184             for (File fileItem : files) {
    185                 if (fileItem.isFile()) {
    186                     size += fileItem.length();
    187                 }
    188             }
    189         }
    190         return size;
    191     }
    192 
    193     /**
    194      * 读取SD卡中文本文件
    195      * 
    196      * @param fileName
    197      * @return
    198      */
    199 
    200     public String readSDFile(String fileName) {
    201         StringBuffer sb = new StringBuffer();
    202         try {
    203             File file = new File(fileName);
    204             FileInputStream fis = new FileInputStream(file);
    205             int c;
    206             while ((c = fis.read()) != -1) {
    207                 sb.append((char) c);
    208             }
    209             fis.close();
    210         } catch (FileNotFoundException e) {
    211             e.printStackTrace();
    212         } catch (IOException e) {
    213             e.printStackTrace();
    214         } catch (Exception e) {
    215             e.printStackTrace();
    216         }
    217         return sb.toString();
    218     }
    219 
    220     /**
    221      * 获取指定目录大小-格式化好字串
    222      * 
    223      * @param dirPath
    224      * @return
    225      */
    226     public String sizeFormatString(long size) {
    227         String sizeFormat = "";
    228         if (size >= 0 && size < SIZE_BT) {
    229             sizeFormat = size + " Byte";
    230         } else if (size >= SIZE_BT && size < SIZE_KB) {
    231             sizeFormat = size / SIZE_BT + " KB";
    232         } else if (size >= SIZE_KB && size < SIZE_MB) {
    233             sizeFormat = size / SIZE_KB + " MB";
    234         } else if (size >= SIZE_MB && size < SIZE_GB) {
    235             BigDecimal longs = new BigDecimal(Double.valueOf(size + "").toString());
    236             BigDecimal sizeMB = new BigDecimal(Double.valueOf(SIZE_MB + "").toString());
    237             String result = longs.divide(sizeMB, SACLE, BigDecimal.ROUND_HALF_UP).toString();
    238             // double result=size/(double)SIZE_MB;
    239             sizeFormat = result + " GB";
    240         } else {
    241             BigDecimal longs = new BigDecimal(Double.valueOf(size + "").toString());
    242             BigDecimal sizeMB = new BigDecimal(Double.valueOf(SIZE_GB + "").toString());
    243             String result = longs.divide(sizeMB, SACLE, BigDecimal.ROUND_HALF_UP).toString();
    244             sizeFormat = result + " TB";
    245         }
    246         return sizeFormat;
    247     }
    248 
    249     /**
    250      * 文件拷贝
    251      * 
    252      * @param fromFile
    253      * @param toFile
    254      * @return
    255      */
    256     public boolean CopySdcardFile(String fromFile, String toFile) {
    257         boolean copyState = false;
    258         try {
    259             InputStream fosfrom = new FileInputStream(fromFile);
    260             OutputStream fosto = new FileOutputStream(toFile);
    261             byte bt[] = new byte[1024];
    262             int c;
    263             while ((c = fosfrom.read(bt)) > 0) {
    264                 fosto.write(bt, 0, c);
    265             }
    266             fosfrom.close();
    267             fosto.close();
    268             copyState = true;
    269         } catch (Exception ex) {
    270             LogUtils.e(SysUtils.LOG_TAG, "CopySdcardFile Exception: fromFile=" + fromFile + " toFile=" + toFile + " 复制失败.", this.mModuleName);
    271         }
    272         return copyState;
    273     }
    274 
    275     // ==============================================
    276     protected String getMd5(String urlName) {
    277         return StringUtils.md5(urlName.getBytes());
    278     }
    279 
    280     @SuppressWarnings("static-access")
    281     private void initSDTool() {
    282         if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
    283             return;
    284         }
    285         SDCardAvailable = true;
    286         SDCardRootDir = Environment.getExternalStorageDirectory().getPath();
    287 
    288         this.initSDDir(SDCardRootDir + SysConstants.PATH_ROOT);
    289         this.initSDDir(SDCardRootDir + SysConstants.PATH_IMAGE);
    290         this.initSDDir(SDCardRootDir + SysConstants.PATH_DATABASE);
    291         this.initSDDir(SDCardRootDir + SysConstants.PATH_DOWNLOAD);
    292         this.initSDDir(SDCardRootDir + SysConstants.PATH_TEMP);
    293         this.initSDDir(SDCardRootDir + SysConstants.PATH_UPIMAGE);
    294     }
    295 
    296     /**
    297      * 获取SDCard根路径
    298      */
    299     public static String getSDCardRootDir() {
    300         return SDCardRootDir;
    301     }
    302 
    303     public static boolean initSDDir(String dirPath) {
    304         boolean flag = false;
    305         if (SDCardAvailable) {
    306             File tempFile = new File(dirPath);
    307             if (!tempFile.exists()) {
    308                 if (tempFile.mkdirs()) {
    309                     flag = true;
    310                     LogUtils.v(SysUtils.LOG_TAG, "tempFile=" + dirPath + " mkdir success!");
    311                 }
    312             } else {
    313                 flag = true;
    314                 LogUtils.v(SysUtils.LOG_TAG, "tempFile=" + dirPath + " is exist!");
    315             }
    316         }
    317         return flag;
    318     }
    319 
    320 }
  • 相关阅读:
    一周随笔--15.10.06
    KVC/KVO总结
    一周随笔--15.9.28
    一周随笔--15.9.21
    CocoaPods使用中的invalid byte sequence in US-ASCII错误
    自定义TabBar
    FMDB配合sqlite使用
    常用第三方库
    LLDB编译器命令
    coreData
  • 原文地址:https://www.cnblogs.com/lijinlun0825/p/5174757.html
Copyright © 2020-2023  润新知