1. 程式人生 > >Android 圖片和音訊的本地儲存方式

Android 圖片和音訊的本地儲存方式

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將檔案輸出即可,當然這可能會比較傷硬碟的,因為這是一個位元組一個位元組的讀取,我們通過緩衝讀取的效果會更好一些,這樣我們的檔案就被儲存下來了。

之後將會更新如何將檔案進行刪除。