Android数据储存(2)向机身内存(Internal Storage)和SDcard(External Storage)读写数据实例

Android数据存储(2)向机身内存(Internal Storage)和SDcard(External Storage)读写数据实例总的来说向内存

Android数据存储(2)向机身内存(Internal Storage)和SDcard(External Storage)读写数据实例

总的来说向内存和SDcard中读写数据和java io操作基本差不多    而机身内存读取和SDcard读取数据有少许差别

机身内存数据读写

 1.机身内存读取主要用个两个类文件输入流(FileInputStream)和文件输出流(FileOutputStream): FileInputStream fileInput = this.openFileInput("test.txt") 第一个参数为 data/此程序包名/data/test.txt 文件下 的文件名 ;

FileOutputStream fileOut = this.openFileOutput("test.txt",this.MODE_APPEND)第一个参数表示文件名 第二个参数表示打开的方式  

2.获取了文件输入输出流之后 其后的文件的读写和基本的IO操作一样

SDcard数据读写

 1.SDcard数据读写需要注定的先要在Androidmainfest.xml文件中注册新建删除和读写的权限 :  

       <!-- 在SD卡上创建与删除权限 -->
       <uses-permission android:name="android.permission.MOUNT_FORMAT_FILESYSTEMS" />
      <!-- 向SD卡上写入权限 -->
       <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

 2.读写的基本流程就是: 

   2. 1  通过Environment类的getExternalStorageState()方法来判断手机是否有SDcard:  Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)

   2.2  最通过getExternalStorageDirectory()方法来获取文件目录:File file = new File(Environment.getExternalStorageDirectory().getCanonicalPath() + "/test.txt"); 读写的文件都在sdcrad文件夹中 通过File Explorer可以导出来

   2.3 其后就和基本IO操作相同了

  2.4还有要注意一点的是 在运行的模拟器的时候要附带虚拟的SDcard时  要在Run as->Run Configurations 中要关联一下 如下图

Android数据储存(2)向机身内存(Internal Storage)和SDcard(External Storage)读写数据实例

机身内存数据读写实例
package com.android.xiong.sdcardtest;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStreamReader;import android.app.Activity;import android.os.Bundle;import android.os.Environment;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class MainActivity extends Activity {private Button write;private Button read;private EditText ed1;private TextView txt1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);write = (Button) findViewById(R.id.write);read = (Button) findViewById(R.id.read);ed1 = (EditText) findViewById(R.id.ed1);txt1 = (TextView) findViewById(R.id.txt1);write.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubwriteSDcard(ed1.getText().toString());}});read.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubtxt1.setText(readSDcard());}});}// 把数据写入SD卡private void writeSDcard(String str) {try {// 判断是否存在SD卡if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {// 获取SD卡的目录File file = Environment.getExternalStorageDirectory();FileOutputStream fileW = new FileOutputStream(file.getCanonicalPath() + "/test.txt");fileW.write(str.getBytes());fileW.close();}} catch (Exception e) {e.printStackTrace();}}// 从SD卡中读取数据private String readSDcard() {StringBuffer str = new StringBuffer();try {// 判断是否存在SDif (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {File file = new File(Environment.getExternalStorageDirectory().getCanonicalPath() + "/test.txt");                                                                // 判断是否存在该文件if (file.exists()) {// 打开文件输入流FileInputStream fileR = new FileInputStream(file);BufferedReader reads = new BufferedReader(new InputStreamReader(fileR));String st = null;while ((st =reads.readLine())!=null ) {str.append(st);}fileR.close();} else {txt1.setText("该目录下文件不存在");}}} catch (Exception e) {e.printStackTrace();}return str.toString();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}