1. 程式人生 > >Android-SDCard外部儲存檔案讀寫

Android-SDCard外部儲存檔案讀寫

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

 

一想到Android中到SdCard就要想到 Environment,寫入到路徑一定要用Environment,讀取到路徑一定要要用Environment,因為每部手機到SdCard到路徑都會不同Environment.getExternalStorageDirectory()

千萬不要這樣寫路徑,例如:/mnt/sdcard/ /sdcard/storage/    等等

 

SdCard讀檔案讀寫操作:

package liudeli.datastorage;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class SdcardActivity extends Activity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sdcard); initViewListener(); }
private void initViewListener() { Button btCheckMountState = findViewById(R.id.bt_check_mount_state); Button btOutput = findViewById(R.id.bt_output_sdcard); Button btInput = findViewById(R.id.bt_input_sdcard); btCheckMountState.setOnClickListener(this); btOutput.setOnClickListener(this); btInput.setOnClickListener(this); } @Override protected void onDestroy() { super.onDestroy(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.bt_check_mount_state: if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { alterToast("Sdcard可用"); } else { alterToast("Sdcard不可用"); } break; case R.id.bt_input_sdcard: { File file = new File(Environment.getExternalStorageDirectory(), "MySdcard.txt"); if (!file.exists()) { alterToast("Sdcard的檔案不存在"); return; } try { BufferedReader br = new BufferedReader(new FileReader(file)); String result = br.readLine(); alterToast(result); br.close(); } catch (Exception e) { e.printStackTrace(); } break; } case R.id.bt_output_sdcard: { File file = new File(Environment.getExternalStorageDirectory(), "MySdcard.txt"); if (!file.exists()) { try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } try { FileWriter fileWriter = new FileWriter(file); fileWriter.write("飯撒發生的噶地方舒服舒服撒馮紹峰撒"); fileWriter.close(); } catch (IOException e) { e.printStackTrace(); } break; } default: break; } } private void alterToast(String text) { Toast.makeText(SdcardActivity.this, text, Toast.LENGTH_LONG).show(); } }

 

Layout Code:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/bt_check_mount_state"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="檢查SDCard掛載狀態"/>

    <Button
        android:id="@+id/bt_output_sdcard"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="寫入到Sdcard檔案"
        />

    <Button
        android:id="@+id/bt_input_sdcard"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="讀取Sdcard檔案"
        />

</LinearLayout>