读写SD卡
Context类的openFileInput和openFileOutput方法都是针对应用程序的数据文件夹进行的文件操作,由于手机的ROM容量有限,因此这种操作有一定局限性。
手机的SD卡提供了比ROM更大的存储容量。更加适合于存取大文件。
Environment[android.os. Environment]
常量及方法 |
类型 |
描述 |
public static final String MEDIA_MOUNTED |
常量 |
扩展存储设允许进行读写访问 |
public static final String MEDIA_CHECKING |
常量 |
扩展存储设处于检查状态 |
public static final String MEDIA_MOUNTED_READ_ONLY |
常量 |
扩展存储设处于只读状态 |
public static final String MEDIA_REMOVED |
常量 |
扩展存储设不存在 |
public static final String MEDIA_UNMOUNTED |
常量 |
没有找到扩展存储设 |
public static File getDataDirectory() |
普通 |
取得Data目录 |
public static File getDownloadCacheDirectory() |
普通 |
取得下载的缓存目录 |
public static File getExternalStorageDirectory() |
普通 |
取得扩展的存储目录 |
public static String getExternalStorageState() |
普通 |
取得扩展存储设备的状态 |
public static File getRootDirectory() |
普通 |
取得Root目录 |
public static boolean isExternalStorageRemovable() |
普通 |
判断扩展的存储目录是否被删除 |
申请SD卡的读写权限
打开项目清单文件,在Permission选项卡中选择权限
SD卡文件读取操作
1 private TextView tv; 2 private Button bt1; 3 private Button bt2; 4 private EditText et; 5 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.xml文件); 9 et = (EditText) findViewById(R.id.sdET); 10 tv = (TextView) findViewById(R.id.sdTV); 11 bt1 = (Button) findViewById(R.id.sdBT01); 12 bt2 = (Button) findViewById(R.id.sdBT02); 13 bt1.setOnClickListener(this); 14 bt2.setOnClickListener(this); 15 } 16 17 public void onClick(View v) { 18 if (!Environment.getExternalStorageState().equals( 19 Environment.MEDIA_MOUNTED)) {// 判断SD卡是否存在 20 Toast.makeText(Sd0.this, "SD卡不存在", 3000).show(); 21 return; 22 } 23 switch (v.getId()) { 24 case R.id.sdBT01: 25 // 创建文件夹对象 26 File dir = new File(Environment.getExternalStorageDirectory(),"test"); 27 if (!dir.exists()) { // 如果目录不存在,就创建 28 dir.mkdir(); 29 } 30 File file = new File(dir, "test.txt"); // 创建文件 31 PrintWriter pw; 32 try { 33 pw = new PrintWriter(file); 34 pw.println(et.getText().toString()); 35 pw.close(); 36 Toast.makeText(Sd0.this, "保存成功", 3000).show(); 37 } catch (FileNotFoundException e) { 38 e.printStackTrace(); 39 } 40 break; 41 case R.id.sdBT02: 42 File f = new File(Environment.getExternalStorageDirectory()+ 43 "/test/test.txt");// 创建文件夹对象 44 BufferedReader br; 45 try { 46 br = new BufferedReader(new InputStreamReader(new FileInputStream(f))); 47 String str = null; 48 while ((str = br.readLine()) != null) { 49 tv.append(str); 50 } 51 } catch (FileNotFoundException e) { 52 e.printStackTrace(); 53 } catch (IOException e) { 54 e.printStackTrace(); 55 } 56 break; 57 } 58 }