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()我們會將目錄創建出來,即使是父目錄不存在,也會將其創建出來,但是當我們調用<pre name="code" class="java">mkdir()方法的時候,我們是無法將父目錄創建出來的,當我們把目錄創建出來之後,我們就需要創建文件夾了,然後是獲取文件路徑,然後是在文件夾下創建一picture,然後就是講我們的圖片保存在文件夾下。*/
</pre><pre name="code" class="java"><pre name="code" class="java"> 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將文件輸出即可,當然這可能會比較傷硬盤的,因爲這是一個字節一個字節的讀取,我們通過緩衝讀取的效果會更好一些,這樣我們的文件就被保存下來了。

之後將會更新如何將文件進行刪除。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章