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 filePath101 * @return102 */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 filePath133 * SDCard卡上完整路径134 * @return void135 */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 dirPath148 * @return149 * @return void150 */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 dirPath174 * @return175 */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 fileName197 * @return198 */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 dirPath224 * @return225 */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 fromFile253 * @param toFile254 * @return255 */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 }