Android中使用SDcard读取文件
平时我们需要在手机上面存储想音频,视频等等的大文件,以前学过使用file进行存储(使用file操作进行存储);由于考虑到手机本身的存储空间小,这时候我们需要把文件存储在sdcard中,今天自己也学习了一下在android进行sdcard的存储使用方法;
首先如果要在程序中使用sdcard进行存储,我们必须要在androidmanifset.xml文件进行下面的权限设置:
在androidmanifest.xml中加入访问sdcard的权限如下:
<!-- 在sdcard中创建与删除文件权限 --> <uses-permission android:name="android.permission.mount_unmount_filesystems"/> <!-- 往sdcard写入数据权限 --> <uses-permission android:name="android.permission.write_external_storage"/>
接着我们在使用sdcard进行读写的时候 会用到environment类下面的几个静态方法
1: getdatadirectory() 获取到androi中的data数据目录
2:getdownloadcachedirectory() 获取到下载的缓存目录
3:getexternalstoragedirectory() 获取到外部存储的目录 一般指sdcard
4:getexternalstoragestate() 获取外部设置的当前状态 一般指sdcard,
android系统中对于外部设置的状态,我们比较常用的应该是 media_mounted(sdcard存在并且可以进行读写) media_mounted_read_only (sdcard存在,只可以进行读操作) 当然还有其他的一些状态,可以在文档中进行查找到
5:getrootdirectory() 获取到android root路径
6:isexternalstorageemulated() 返回boolean值判断外部设置是否有效
7:isexternalstorageremovable() 返回boolean值,判断外部设置是否可以移除
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <textview android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <edittext android:id="@+id/et1" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <button android:id="@+id/bt1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="使用sdcard写操作" /> <edittext android:id="@+id/et2" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <button android:id="@+id/bt2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="使用sdcard读操作" /> </linearlayout>
package com.example.yanlei.yh;
import android.os.bundle; import android.os.environment; import android.support.v7.app.appcompatactivity; import android.view.menu; import android.view.menuitem; import android.widget.textview; import org.apache.http.util.encodingutils; import java.io.bufferedreader; import java.io.file; import java.io.fileinputstream; import java.io.fileoutputstream; import java.io.ioexception; import java.io.inputstream; import java.io.inputstreamreader; import java.util.arraylist; import java.util.list; import java.io.file; import java.io.fileinputstream; import java.io.fileoutputstream; import android.app.activity; import android.content.context; import android.os.bundle; import android.os.environment; import android.view.view; import android.view.view.onclicklistener; import android.widget.button; import android.widget.edittext; import android.widget.toast; public class mainactivity extends appcompatactivity { private button bt1, bt2; private edittext et1, et2; private static final string filename = "temp_file.txt"; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); bt1 = (button) this.findviewbyid(r.id.bt1); bt2 = (button) this.findviewbyid(r.id.bt2); et1 = (edittext) this.findviewbyid(r.id.et1); et2 = (edittext) this.findviewbyid(r.id.et2); bt1.setonclicklistener(new mysetonclicklistener()); bt2.setonclicklistener(new mysetonclicklistener()); } private class mysetonclicklistener implements onclicklistener { @override public void onclick(view v) { file file = new file(environment.getexternalstoragedirectory(), filename); switch (v.getid()) { case r.id.bt1:// 使用sdcard写操作 if (environment.getexternalstoragestate().equals( environment.media_mounted)) { try { fileoutputstream fos = new fileoutputstream(file); fos.write(et1.gettext().tostring().getbytes()); fos.close(); toast.maketext(mainactivity.this, "写入文件成功", toast.length_long).show(); } catch (exception e) { toast.maketext(mainactivity.this, "写入文件失败", toast.length_short).show(); } } else { // 此时sdcard不存在或者不能进行读写操作的 toast.maketext(mainactivity.this, "此时sdcard不存在或者不能进行读写操作", toast.length_short).show(); } break; case r.id.bt2:// 使用sdcard读操作 if (environment.getexternalstoragestate().equals( environment.media_mounted)) { try { fileinputstream inputstream = new fileinputstream(file); byte[] b = new byte[inputstream.available()]; inputstream.read(b); et2.settext(new string(b)); toast.maketext(mainactivity.this, "读取文件成功", toast.length_long).show(); } catch (exception e) { toast.maketext(mainactivity.this, "读取失败", toast.length_short).show(); } } else { // 此时sdcard不存在或者不能进行读写操作的 toast.maketext(mainactivity.this, "此时sdcard不存在或者不能进行读写操作", toast.length_short).show(); } break; } } } @override public boolean oncreateoptionsmenu(menu menu) { // inflate the menu; this adds items to the action bar if it is present. getmenuinflater().inflate(r.menu.menu_main, menu); return true; } @override public boolean onoptionsitemselected(menuitem item) { // handle action bar item clicks here. the action bar will // automatically handle clicks on the home/up button, so long // as you specify a parent activity in androidmanifest.xml. int id = item.getitemid(); //noinspection simplifiableifstatement if (id == r.id.action_settings) { return true; } return super.onoptionsitemselected(item); } }
以上所述给大家介绍了android中使用sdcard读取文件,希望对大家有所帮助!