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

来源:互联网 发布:kali linux gnuradio 编辑:程序博客网 时间:2024/05/18 06:58

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

    欢迎加入QQ交流3群:317874559

机身内存数据读写

 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 中要关联一下 如下图


机身内存数据读写实例

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:layout_gravity="center_horizontal"  
  6.     android:orientation="vertical"  
  7.     tools:context=".MainActivity" >  
  8.     <EditText   
  9.         android:layout_width="match_parent"  
  10.         android:layout_height="wrap_content"  
  11.         android:id="@+id/ed1"  
  12.         android:inputType="textMultiLine"/>  
  13.     <Button   
  14.         android:id="@+id/write"  
  15.         android:text="写入"  
  16.         android:layout_width="match_parent"  
  17.         android:layout_height="wrap_content"/>  
  18.     <Button   
  19.         android:id="@+id/read"  
  20.         android:layout_width="match_parent"  
  21.         android:layout_height="wrap_content"  
  22.         android:text="读入"/>  
  23.     <EditText   
  24.         android:id="@+id/ed2"  
  25.         android:layout_width="match_parent"  
  26.         android:layout_height="wrap_content"  
  27.         android:inputType="textMultiLine"/>  
  28.     <Button   
  29.         android:id="@+id/delete"  
  30.         android:layout_width="match_parent"  
  31.         android:layout_height="wrap_content"  
  32.         android:text="删除指定的文件"  
  33.         />  
  34.     <EditText   
  35.         android:id="@+id/ed3"  
  36.         android:layout_width="match_parent"  
  37.         android:layout_height="wrap_content"  
  38.         />  
  39.   
  40. </LinearLayout>  


[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. package com.android.xiong.fileiotest;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.File;  
  5. import java.io.FileInputStream;  
  6. import java.io.FileOutputStream;  
  7. import java.io.InputStreamReader;  
  8. import java.lang.reflect.Array;  
  9. import java.util.ArrayList;  
  10. import java.util.Arrays;  
  11. import java.util.List;  
  12.   
  13. import android.app.Activity;  
  14. import android.os.Bundle;  
  15. import android.view.Menu;  
  16. import android.view.View;  
  17. import android.view.View.OnClickListener;  
  18. import android.widget.Button;  
  19. import android.widget.EditText;  
  20.   
  21. public class MainActivity extends Activity {  
  22.   
  23.     private Button read;  
  24.     private Button write;  
  25.     private EditText ed1;  
  26.     private EditText ed2;  
  27.     private EditText ed3;  
  28.     private Button delete;  
  29.   
  30.     @Override  
  31.     protected void onCreate(Bundle savedInstanceState) {  
  32.         super.onCreate(savedInstanceState);  
  33.         setContentView(R.layout.activity_main);  
  34.         read = (Button) findViewById(R.id.read);  
  35.         write = (Button) findViewById(R.id.write);  
  36.         delete = (Button) findViewById(R.id.delete);  
  37.         ed3 = (EditText) findViewById(R.id.ed3);  
  38.         ed2 = (EditText) findViewById(R.id.ed2);  
  39.         ed1 = (EditText) findViewById(R.id.ed1);  
  40.         write.setOnClickListener(new OnClickListener() {  
  41.             @Override  
  42.             public void onClick(View v) {  
  43.                 String str = ed1.getText().toString();  
  44.                 if (!str.equals("")) {  
  45.                     write(str);  
  46.                 }  
  47.   
  48.             }  
  49.         });  
  50.         read.setOnClickListener(new OnClickListener() {  
  51.   
  52.             @Override  
  53.             public void onClick(View v) {  
  54.                 read();  
  55.   
  56.             }  
  57.         });  
  58.         delete.setOnClickListener(new OnClickListener() {  
  59.             @Override  
  60.             public void onClick(View v) {  
  61.                 String str = ed3.getText().toString();  
  62.                 if (!str.equals("")) {  
  63.                     deleteFiles(str);  
  64.                 } else {  
  65.                     ed3.setText(str + ":该文件输入错误或不存在!");  
  66.                 }  
  67.   
  68.             }  
  69.         });  
  70.   
  71.     }  
  72.   
  73.     private void write(String content) {  
  74.         try {  
  75.             // 以追加的方式打开文件输出流  
  76.             FileOutputStream fileOut = this.openFileOutput("test.txt",  
  77.                     this.MODE_APPEND);  
  78.             // 写入数据  
  79.             fileOut.write(content.getBytes());  
  80.             // 关闭文件输出流  
  81.             fileOut.close();  
  82.   
  83.         } catch (Exception e) {  
  84.             e.printStackTrace();  
  85.         }  
  86.     }  
  87.   
  88.     private void read() {  
  89.         try {  
  90.             ed2.setText("");  
  91.             // 打开文件输入流  
  92.             FileInputStream fileInput = this.openFileInput("test.txt");  
  93.             BufferedReader br = new BufferedReader(new InputStreamReader(  
  94.                     fileInput));  
  95.             String str = null;  
  96.             StringBuilder stb = new StringBuilder();  
  97.             while ((str = br.readLine()) !=null ) {  
  98.                 stb.append(str);  
  99.             }  
  100.             ed2.setText(stb);  
  101.         } catch (Exception e) {  
  102.             e.printStackTrace();  
  103.         }  
  104.   
  105.     }  
  106.       
  107.     //删除指定的文件  
  108.     private void deleteFiles(String fileName) {  
  109.         try {  
  110.             // 获取data文件中的所有文件列表  
  111.             List<String> name = Arrays.asList(this.fileList());  
  112.             if (name.contains(fileName)) {  
  113.                 this.deleteFile(fileName);  
  114.                 ed3.setText(fileName + ":该文件成功删除!");  
  115.             } else  
  116.                 ed3.setText(fileName + ":该文件输入错误或不存在!");  
  117.   
  118.         } catch (Exception e) {  
  119.             e.printStackTrace();  
  120.         }  
  121.     }  
  122.   
  123.     @Override  
  124.     public boolean onCreateOptionsMenu(Menu menu) {  
  125.         getMenuInflater().inflate(R.menu.main, menu);  
  126.         return true;  
  127.     }  
  128.   
  129. }  

SDcard数据读写实例

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:gravity="center_horizontal"  
  6.     android:orientation="vertical"  
  7.     tools:context=".MainActivity" >  
  8.     <EditText   
  9.         android:id="@+id/ed1"  
  10.         android:layout_width="match_parent"  
  11.         android:layout_height="wrap_content"  
  12.         android:inputType="textMultiLine"/>  
  13.     <Button   
  14.         android:id="@+id/write"  
  15.         android:layout_width="match_parent"  
  16.         android:layout_height="wrap_content"  
  17.         android:text="写入SD卡中"/>  
  18.     <Button   
  19.         android:id="@+id/read"  
  20.         android:layout_width="match_parent"  
  21.         android:layout_height="wrap_content"  
  22.         android:text="读取SD文件"/>  
  23.     <TextView   
  24.         android:id="@+id/txt1"  
  25.         android:layout_width="match_parent"  
  26.         android:layout_height="wrap_content"/>  
  27. </LinearLayout>  


[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.android.xiong.sdcardtest"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.   
  7.     <uses-sdk  
  8.         android:minSdkVersion="14"  
  9.         android:targetSdkVersion="17" />  
  10.     <!-- 在SD卡上创建与删除权限 -->  
  11.     <uses-permission android:name="android.permission.MOUNT_FORMAT_FILESYSTEMS" />  
  12.     <!-- 向SD卡上写入权限 -->  
  13.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
  14.   
  15.     <application  
  16.         android:allowBackup="true"  
  17.         android:icon="@drawable/ic_launcher"  
  18.         android:label="@string/app_name"  
  19.         android:theme="@style/AppTheme" >  
  20.         <activity  
  21.             android:name="com.android.xiong.sdcardtest.MainActivity"  
  22.             android:label="@string/app_name" >  
  23.             <intent-filter>  
  24.                 <action android:name="android.intent.action.MAIN" />  
  25.   
  26.                 <category android:name="android.intent.category.LAUNCHER" />  
  27.             </intent-filter>  
  28.         </activity>  
  29.     </application>  
  30.   
  31. </manifest>  
[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. package com.android.xiong.sdcardtest;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.File;  
  5. import java.io.FileInputStream;  
  6. import java.io.FileOutputStream;  
  7. import java.io.InputStreamReader;  
  8.   
  9. import android.app.Activity;  
  10. import android.os.Bundle;  
  11. import android.os.Environment;  
  12. import android.view.Menu;  
  13. import android.view.View;  
  14. import android.view.View.OnClickListener;  
  15. import android.widget.Button;  
  16. import android.widget.EditText;  
  17. import android.widget.TextView;  
  18.   
  19. public class MainActivity extends Activity {  
  20.   
  21.     private Button write;  
  22.     private Button read;  
  23.   
  24.     private EditText ed1;  
  25.     private TextView txt1;  
  26.   
  27.     @Override  
  28.     protected void onCreate(Bundle savedInstanceState) {  
  29.         super.onCreate(savedInstanceState);  
  30.         setContentView(R.layout.activity_main);  
  31.         write = (Button) findViewById(R.id.write);  
  32.         read = (Button) findViewById(R.id.read);  
  33.         ed1 = (EditText) findViewById(R.id.ed1);  
  34.         txt1 = (TextView) findViewById(R.id.txt1);  
  35.         write.setOnClickListener(new OnClickListener() {  
  36.   
  37.             @Override  
  38.             public void onClick(View v) {  
  39.                 // TODO Auto-generated method stub  
  40.                 writeSDcard(ed1.getText().toString());  
  41.   
  42.             }  
  43.         });  
  44.         read.setOnClickListener(new OnClickListener() {  
  45.   
  46.             @Override  
  47.             public void onClick(View v) {  
  48.                 // TODO Auto-generated method stub  
  49.   
  50.                 txt1.setText(readSDcard());  
  51.             }  
  52.         });  
  53.     }  
  54.   
  55.     // 把数据写入SD卡  
  56.   
  57.     private void writeSDcard(String str) {  
  58.   
  59.         try {  
  60.             // 判断是否存在SD卡  
  61.             if (Environment.getExternalStorageState().equals(  
  62.                     Environment.MEDIA_MOUNTED)) {  
  63.                 // 获取SD卡的目录  
  64.                 File file = Environment.getExternalStorageDirectory();  
  65.                 FileOutputStream fileW = new FileOutputStream(file.getCanonicalPath() + "/test.txt");  
  66.                 fileW.write(str.getBytes());  
  67.                 fileW.close();  
  68.             }  
  69.         } catch (Exception e) {  
  70.             e.printStackTrace();  
  71.         }  
  72.   
  73.     }  
  74.   
  75.     // 从SD卡中读取数据  
  76.     private String readSDcard() {  
  77.         StringBuffer str = new StringBuffer();  
  78.         try {  
  79.             // 判断是否存在SD  
  80.             if (Environment.getExternalStorageState().equals(  
  81.                     Environment.MEDIA_MOUNTED)) {  
  82.                 File file = new File(Environment.getExternalStorageDirectory()  
  83.                         .getCanonicalPath() + "/test.txt");                                                                  
  84.                 // 判断是否存在该文件  
  85.                 if (file.exists()) {  
  86.                     // 打开文件输入流  
  87.                     FileInputStream fileR = new FileInputStream(file);  
  88.                     BufferedReader reads = new BufferedReader(  
  89.                             new InputStreamReader(fileR));  
  90.                     String st = null;  
  91.                     while ((st =reads.readLine())!=null ) {  
  92.                         str.append(st);  
  93.                     }  
  94.                     fileR.close();  
  95.                 } else {  
  96.                     txt1.setText("该目录下文件不存在");  
  97.                 }  
  98.             }  
  99.   
  100.         } catch (Exception e) {  
  101.             e.printStackTrace();  
  102.         }  
  103.         return str.toString();  
  104.     }  
  105.   
  106.     @Override  
  107.     public boolean onCreateOptionsMenu(Menu menu) {  
  108.         // Inflate the menu; this adds items to the action bar if it is present.  
  109.         getMenuInflater().inflate(R.menu.main, menu);  
  110.         return true;  
  111.     }  
  112.   
  113. }  
0 0