一、概述
外部存儲可以通過物理介質提供(如SD卡),也可以通過將內部存儲中的一部分封裝而成,設備可以有多個外部存儲實例。<借鑑>
安卓中在SD卡里面保存文件是很常見的,一般項目中會有保存圖片文件夾,音樂文件夾,視頻文件夾,聊天記錄等等。。。。
今天我們就從保存SD卡公共目錄,SD卡私有目錄,和保存文件個文件夾,來一步一步進行解析。
二、代碼
(測試手機華爲4.4.4)
首先看下Files工具類
1.//判斷是否有Sd卡
public static boolean isSDCardMounted(){
return Environment.getExternalStorageDirectory().equals("Environment.MEDIA_MOUNTED");
}
2.//獲取SD卡根目錄
public static String getSDCardBaseDir(){
if (isSDCardMounted()) {
return Environment.getExternalStorageDirectory().getAbsolutePath();
}
return null;
}
//看下SD卡根目錄打印結果
其中這個emulated的意思是手機自帶存儲卡。並不是外置的存儲卡
三、首先把一張圖片保存到SD卡公共目錄上;
先介紹一個方法:getExternalStoragePublicDirectory(String type) 返回類型 Files
此方法是確定公共目錄下的具體目錄 例:type=Environment.DIRECTORY_PICTURES
//看下打印結果
首先從drawable中獲取小機器人圖片,首先獲取Resources類然後轉爲bitmap,在把bitmap轉爲byte[];
Resources res=getResources();
Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.ic_launcher);
private byte[] getbytes(Bitmap bm) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
return baos.toByteArray();
}
//往SD卡里面存儲,首先可以修改下圖片的名字,用系統時間來作爲圖片的名稱
private String initDate() {
Date date=new Date(System.currentTimeMillis());
SimpleDateFormat dateFormat=new SimpleDateFormat("'IMG'_yyyyMMdd_HHmmss");
return dateFormat.format(date)+".jpg";
}
//此方法是確定公共目錄下的具體目錄 例:type=Environment.DIRECTORY_PICTURES
File file=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
現在已經確定好了公共目錄和文件名稱組合成文件的路徑
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(new File(file,initDate)));
try {
bos = new BufferedOutputStream(new FileOutputStream(new File(file, initDate())));
bos.write(byte);//此處就是你轉的字節數組byte
bos.flush();
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
bos.close();
} catch (Exception e2) {
}
}
現在打印下圖片保存的完整路徑
公共目錄下圖片已經保存完畢。
2.2:現在在存入自定義目錄下
一般在項目中都會建一個自定義目錄來存放自己的東西
自定義目錄最關鍵的是:(獲取SD卡的絕對路徑)此處的淘寶就是文件名
File file=Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+taobao;
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(new File(file,initDate)));
判斷是否此目錄,沒有的話就創建。其中mkdis()和mkir()是有區別的
if (!file.exists()) {
file.mkdirs();// 遞歸創建自定義目錄
}
此處爲存儲圖片,接下來打印下路徑try {
bos = new BufferedOutputStream(new FileOutputStream(new File(
file, fileName)));
bos.write(data);
bos.flush();
return true;
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
bos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}