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将文件输出即可,当然这可能会比较伤硬盘的,因为这是一个字节一个字节的读取,我们通过缓冲读取的效果会更好一些,这样我们的文件就被保存下来了。

之后将会更新如何将文件进行删除。






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