Android內部存儲與外部存儲的文件操作類


 

 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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM