Android 圖片和音訊的本地儲存方式
阿新 • • 發佈:2018-12-10
android 在本地建立資料夾,並將圖片和音訊儲存在資料夾下,
<span style="font-size:18px;"> public void newFile() { String fileName = "niannian"; String albumFileName = "picture"; File file = new File(Environment.getExternalStorageDirectory(), fileName); if (!file.exists()) { file.mkdirs(); try { file.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } path = file.getPath(); File albumFile = new File(path, albumFileName); if (!albumFile.exists()) { albumFile.mkdir(); try { albumFile.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } albumPath = albumFile.getAbsolutePath(); }</span>
首先是在本地建立一個niannian 資料夾,然後在資料夾下建立一個picture資料夾,首先通過
File file = new File(Environment.getExternalStorageDirectory(),fileName);
)第一個引數是我們所要建立資料夾的根目錄,然後第二個引數是我們所要建立檔案的名字,但是此時並沒有將檔案建立出來,這只是一個我們建立好的目錄,然後我們要判斷這個目錄是否存在,如果不存在的話,呼叫這個方法。
mkdirs()我們會將目錄創建出來,即使是父目錄不存在,也會將其創建出來, 但是當我們呼叫mkdir()方法的時候, 我們是無法將父目錄創建出來的,當我們把目錄創建出來之後, 我們就需要建立檔案夾了,然後是獲取檔案路徑,然後是在資料夾下建立一picture, 然後就是講我們的圖片儲存在資料夾下。
public void savePic(Bitmap bitmap) { BufferedOutputStream os = null; File file = new File (path+"/picture",Calendar.getInstance().getTimeInMillis()+".png"); if(!file.exists()){ file.delete(); } try { file.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { os = new BufferedOutputStream(new FileOutputStream(file)); bitmap.compress(Bitmap.CompressFormat.PNG, 100, os); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(os!=null){ try { os.flush(); os.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
儲存圖片的方式:首先我們需要一個輸出緩衝流,然後就是為當前需要儲存的檔案創立一個檔名,用當前的時間作為一個檔名,如果有相同的已經存在就將其刪除,然後將其建立,然後初始化之間宣告的緩衝流,緩衝流建構函式的引數是一個檔案輸出流,然後就是將圖片進行壓縮,壓縮排這個緩衝流,然後在finally中釋放資源,利用flush方法,釋放掉緩衝流中未輸出完的資源,然後將其將輸出流關閉。
下面是錄音檔案的儲存,這個我們在錄製的時候就將其儲存,下面是程式碼例項
public void playRecord() {
mediaRecorder = new MediaRecorder();
// 第1步:設定音訊來源(MIC表示麥克風)
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
// 第2步:設定音訊輸出格式(預設的輸出格式)
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
// 第3步:設定音訊編碼方式(預設的編碼方式)
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
// 第4步:指定音訊輸出檔案
mediaRecorder.setOutputFile(newFileName());
// 第5步:呼叫prepare方法
try {
mediaRecorder.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 第6步:呼叫start方法開始錄音
mediaRecorder.start();
}
public String newFileName() {
SharedPreferences filePath = getSharedPreferences("filepath", MODE_PRIVATE);
mFileName = filePath.getString("path", null);
String s = new SimpleDateFormat("yyyy-MM-dd hhmmss").format(new Date());
return mFileName += "/music/" + s + ".3gp";
}
這裡的檔案路勁是我們之前建立檔案的時候儲存的,通過newFileName(),我們會得到我們所需要儲存檔案的檔案路徑和檔名,然後我們將檔名返回,通過方法setoutfile將檔案輸出即可,當然這可能會比較傷硬碟的,因為這是一個位元組一個位元組的讀取,我們通過緩衝讀取的效果會更好一些,這樣我們的檔案就被儲存下來了。
之後將會更新如何將檔案進行刪除。