<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>