1 public class SDCardHelper { 2
3 // 判斷SD卡是否被掛載
4 public static boolean isSDCardMounted() { 5 // return Environment.getExternalStorageState().equals("mounted");
6 return Environment.getExternalStorageState().equals( 7 Environment.MEDIA_MOUNTED); 8 } 9
10 // 獲取SD卡的根目錄
11 public static String getSDCardBaseDir() { 12 if (isSDCardMounted()) { 13 return Environment.getExternalStorageDirectory().getAbsolutePath(); 14 } 15 return null; 16 } 17
18 // 獲取SD卡的完整空間大小,返回MB
19 public static long getSDCardSize() { 20 if (isSDCardMounted()) { 21 StatFs fs = new StatFs(getSDCardBaseDir()); 22 long count = fs.getBlockCountLong(); 23 long size = fs.getBlockSizeLong(); 24 return count * size / 1024 / 1024; 25 } 26 return 0; 27 } 28
29 // 獲取SD卡的剩余空間大小
30 public static long getSDCardFreeSize() { 31 if (isSDCardMounted()) { 32 StatFs fs = new StatFs(getSDCardBaseDir()); 33 long count = fs.getFreeBlocksLong(); 34 long size = fs.getBlockSizeLong(); 35 return count * size / 1024 / 1024; 36 } 37 return 0; 38 } 39
40 // 獲取SD卡的可用空間大小
41 public static long getSDCardAvailableSize() { 42 if (isSDCardMounted()) { 43 StatFs fs = new StatFs(getSDCardBaseDir()); 44 long count = fs.getAvailableBlocksLong(); 45 long size = fs.getBlockSizeLong(); 46 return count * size / 1024 / 1024; 47 } 48 return 0; 49 } 50
51 // 往SD卡的公有目錄下保存文件
52 public static boolean saveFileToSDCardPublicDir(byte[] data, String type, String fileName) { 53 BufferedOutputStream bos = null; 54 if (isSDCardMounted()) { 55 File file = Environment.getExternalStoragePublicDirectory(type); 56 try { 57 bos = new BufferedOutputStream(new FileOutputStream(new File(file, fileName))); 58 bos.write(data); 59 bos.flush(); 60 return true; 61 } catch (Exception e) { 62 e.printStackTrace(); 63 } finally { 64 try { 65 bos.close(); 66 } catch (IOException e) { 67 // TODO Auto-generated catch block
68 e.printStackTrace(); 69 } 70 } 71 } 72 return false; 73 } 74
75 // 往SD卡的自定義目錄下保存文件
76 public static boolean saveFileToSDCardCustomDir(byte[] data, String dir, String fileName) { 77 BufferedOutputStream bos = null; 78 if (isSDCardMounted()) { 79 File file = new File(getSDCardBaseDir() + File.separator + dir); 80 if (!file.exists()) { 81 file.mkdirs();// 遞歸創建自定義目錄
82 } 83 try { 84 bos = new BufferedOutputStream(new FileOutputStream(new File(file, fileName))); 85 bos.write(data); 86 bos.flush(); 87 return true; 88 } catch (Exception e) { 89 e.printStackTrace(); 90 } finally { 91 try { 92 bos.close(); 93 } catch (IOException e) { 94 // TODO Auto-generated catch block
95 e.printStackTrace(); 96 } 97 } 98 } 99 return false; 100 } 101
102 // 往SD卡的私有Files目錄下保存文件
103 public static boolean saveFileToSDCardPrivateFilesDir(byte[] data, String type, String fileName, Context context) { 104 BufferedOutputStream bos = null; 105 if (isSDCardMounted()) { 106 File file = context.getExternalFilesDir(type); 107 try { 108 bos = new BufferedOutputStream(new FileOutputStream(new File(file, fileName))); 109 bos.write(data); 110 bos.flush(); 111 return true; 112 } catch (Exception e) { 113 e.printStackTrace(); 114 } finally { 115 try { 116 bos.close(); 117 } catch (IOException e) { 118 // TODO Auto-generated catch block
119 e.printStackTrace(); 120 } 121 } 122 } 123 return false; 124 } 125
126 // 往SD卡的私有Cache目錄下保存文件
127 public static boolean saveFileToSDCardPrivateCacheDir(byte[] data, String fileName, Context context) { 128 BufferedOutputStream bos = null; 129 if (isSDCardMounted()) { 130 File file = context.getExternalCacheDir(); 131 try { 132 bos = new BufferedOutputStream(new FileOutputStream(new File(file, fileName))); 133 bos.write(data); 134 bos.flush(); 135 return true; 136 } catch (Exception e) { 137 e.printStackTrace(); 138 } finally { 139 try { 140 bos.close(); 141 } catch (IOException e) { 142 // TODO Auto-generated catch block
143 e.printStackTrace(); 144 } 145 } 146 } 147 return false; 148 } 149
150 // 保存bitmap圖片到SDCard的私有Cache目錄
151 public static boolean saveBitmapToSDCardPrivateCacheDir(Bitmap bitmap, String fileName, Context context) { 152 if (isSDCardMounted()) { 153 BufferedOutputStream bos = null; 154 // 獲取私有的Cache緩存目錄
155 File file = context.getExternalCacheDir(); 156
157 try { 158 bos = new BufferedOutputStream(new FileOutputStream(new File(file, fileName))); 159 if (fileName != null && (fileName.contains(".png") || fileName.contains(".PNG"))) { 160 bitmap.compress(Bitmap.CompressFormat.PNG, 100, bos); 161 } else { 162 bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos); 163 } 164 bos.flush(); 165 } catch (Exception e) { 166 e.printStackTrace(); 167 } finally { 168 if (bos != null) { 169 try { 170 bos.close(); 171 } catch (IOException e) { 172 e.printStackTrace(); 173 } 174 } 175 } 176 return true; 177 } else { 178 return false; 179 } 180 } 181
182 // 從SD卡獲取文件
183 public static byte[] loadFileFromSDCard(String fileDir) { 184 BufferedInputStream bis = null; 185 ByteArrayOutputStream baos = new ByteArrayOutputStream(); 186
187 try { 188 bis = new BufferedInputStream(new FileInputStream(new File(fileDir))); 189 byte[] buffer = new byte[8 * 1024]; 190 int c = 0; 191 while ((c = bis.read(buffer)) != -1) { 192 baos.write(buffer, 0, c); 193 baos.flush(); 194 } 195 return baos.toByteArray(); 196 } catch (Exception e) { 197 e.printStackTrace(); 198 } finally { 199 try { 200 baos.close(); 201 bis.close(); 202 } catch (IOException e) { 203 e.printStackTrace(); 204 } 205 } 206 return null; 207 } 208
209 // 從SDCard中尋找指定目錄下的文件,返回Bitmap
210 public Bitmap loadBitmapFromSDCard(String filePath) { 211 byte[] data = loadFileFromSDCard(filePath); 212 if (data != null) { 213 Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length); 214 if (bm != null) { 215 return bm; 216 } 217 } 218 return null; 219 } 220
221 // 獲取SD卡公有目錄的路徑
222 public static String getSDCardPublicDir(String type) { 223 return Environment.getExternalStoragePublicDirectory(type).toString(); 224 } 225
226 // 獲取SD卡私有Cache目錄的路徑
227 public static String getSDCardPrivateCacheDir(Context context) { 228 return context.getExternalCacheDir().getAbsolutePath(); 229 } 230
231 // 獲取SD卡私有Files目錄的路徑
232 public static String getSDCardPrivateFilesDir(Context context, String type) { 233 return context.getExternalFilesDir(type).getAbsolutePath(); 234 } 235
236 public static boolean isFileExist(String filePath) { 237 File file = new File(filePath); 238 return file.isFile(); 239 } 240
241 // 從sdcard中刪除文件
242 public static boolean removeFileFromSDCard(String filePath) { 243 File file = new File(filePath); 244 if (file.exists()) { 245 try { 246 file.delete(); 247 return true; 248 } catch (Exception e) { 249 return false; 250 } 251 } else { 252 return false; 253 } 254 } 255 }