SD 卡读写程序

Environment 类位于 android.os 包中,是用于检验和获取手机 SD 卡状态、根路径等信息的工具类。Environment 类中的方法都是静态方法,可以直接调用。

SD 卡读写操作一般需要 4 个步骤:

1、判断 SD 卡状态。Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) 值为 Ture。

2、获取根路径。Environment.getExternalStorageDirectory()。

3、创建文件夹。File dir = new File(sdRoot,dirName);

4、I/O 读写操作。

  1 import java.io.BufferedReader;
  2 import java.io.File;
  3 import java.io.FileInputStream;
  4 import java.io.FileNotFoundException;
  5 import java.io.FileOutputStream;
  6 import java.io.FileReader;
  7 import java.io.IOException;
  8 import java.io.InputStreamReader;
  9 import java.io.PrintWriter;
 10 import java.sql.Statement;
 11 
 12 import android.os.Bundle;
 13 import android.os.Environment;
 14 import android.app.Activity;
 15 import android.content.Context;
 16 import android.content.SharedPreferences;
 17 import android.content.SharedPreferences.Editor;
 18 import android.view.Menu;
 19 import android.view.View;
 20 import android.view.View.OnClickListener;
 21 import android.widget.Button;
 22 import android.widget.EditText;
 23 import android.widget.TextView;
 24 import android.widget.Toast;
 25 
 26 public class MainActivity extends Activity implements OnClickListener{
 27     
 28     EditText et1,et2;
 29     Button b1,b2;
 30     TextView tv1;
 31     
 32     @Override
 33     protected void onCreate(Bundle savedInstanceState) {
 34         super.onCreate(savedInstanceState);
 35         
 36         setContentView(R.layout.activity_main);
 37         et1 = (EditText) findViewById(R.id.et_name);
 38         et2 = (EditText) findViewById(R.id.et_pwd);
 39         tv1 = (TextView) findViewById(R.id.content);
 40         b1 = (Button) findViewById(R.id.bt_save);
 41         b2 = (Button) findViewById(R.id.bt_read);
 42         b1.setOnClickListener(this);
 43         b2.setOnClickListener(this);
 44     }
 45     
 46     @Override
 47     public void onClick(View view) {
 48         
 49         switch(view.getId()){
 50         case R.id.bt_save:
 51             save("/contract/data","cd.txt");
 52             et1.setText("");
 53             et2.setText("");
 54             break;
 55         case R.id.bt_read:
 56             read("/contract/data","cd.txt");
 57             break;
 58         }
 59     }
 60     
 61     // 读取文件
 62     private void read(String dirName, String fileName) {
 63         
 64         // 判断 SD 状态是否可用
 65         if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
 66             Toast.makeText(this, "SD卡状态异常", Toast.LENGTH_LONG).show();
 67             return;
 68         }
 69         
 70         // 获取 SD 卡根路径
 71         File sdRoot = Environment.getExternalStorageDirectory();
 72         File file = new File(sdRoot.getAbsolutePath() + dirName, fileName);
 73         if(!file.exists()){
 74             Toast.makeText(this, "联系人数据不存在", Toast.LENGTH_LONG).show();
 75             return;
 76         }
 77         
 78         BufferedReader br = null;
 79         try {
 80             br = new BufferedReader(new FileReader(file));
 81             String ln = null;
 82             tv1.setText("");
 83             while((ln = br.readLine())!=null){
 84                 tv1.append(ln+"\n");
 85             }
 86         } catch (FileNotFoundException e) {
 87             // TODO Auto-generated catch block
 88             e.printStackTrace();
 89         } catch (IOException e) {
 90             // TODO Auto-generated catch block
 91             e.printStackTrace();
 92         }finally{
 93             if(br != null)
 94                 try {
 95                     br.close();
 96                 } catch (IOException e) {
 97                     // TODO Auto-generated catch block
 98                     e.printStackTrace();
 99                 }
100         }
101     }
102     
103     // 保存文件
104     private void save(String dirName,String fileName) {
105         
106         // 判断 SD 状态是否可用
107         if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
108             Toast.makeText(this, "SD卡状态异常", Toast.LENGTH_LONG).show();
109             return;
110         }
111         // 获取 SD 卡根路径
112         File sdRoot = Environment.getExternalStorageDirectory();
113         // 创建文件夹
114         File dir = new File(sdRoot,dirName);
115         if(!dir.exists()){
116             dir.mkdirs();
117         }
118         // 创建文件,并写入数据
119         File file = new File(dir,fileName);
120         PrintWriter pw = null;
121         try {
122             if(!file.exists()){
123                 file.createNewFile();
124             }
125             pw = new PrintWriter(new FileOutputStream(file,true));
126             pw.println("好友姓名:" + et1.getText().toString() + "  联系方式:" + et2.getText().toString());
127             pw.flush();
128         } catch (IOException e) {
129             // TODO Auto-generated catch block
130             e.printStackTrace();
131         }finally{
132             if(pw!=null)pw.close();
133         }
134     }
135 }
MainActivity.java

查看数据存储 DDMS/Fileexplorer

mnt/sdcard/contract/data/cd.txt

【注】

1、应用程序安装路径下存储文件不宜过大,对应需要下载的文件(如音乐、视频等)应该存放在 SD 卡中。

2、使用 SD 卡前需要检验 SD 卡的状态。

3、添加权限。<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

4、封装成一个简单的SD 卡数据存储操作类。

  1 import java.io.BufferedReader;
  2 import java.io.File;
  3 import java.io.FileNotFoundException;
  4 import java.io.FileOutputStream;
  5 import java.io.IOException;
  6 import java.io.InputStream;
  7 import java.io.InputStreamReader;
  8 import java.io.PrintWriter;
  9 
 10 import android.os.Environment;
 11 import android.util.Log;
 12 
 13 /*
 14  * 用于向 sdcard 保存数据
 15  * */
 16 public class SaveDataSDCard {
 17     
 18     final static String T = "Tag";
 19     
 20     // 获取 SdCard 根路径
 21     public File getRoot(){
 22         
 23         if(Environment.getExternalStorageState()
 24                 .equalsIgnoreCase(Environment.MEDIA_REMOVED)){
 25             Log.i(T, "Sd不存在");
 26             return null;
 27         }
 28         return Environment.getExternalStorageDirectory();
 29     }
 30     
 31     // 创建文件夹
 32     public File createDir(String dirStr){
 33         
 34         File dir = new File(getRoot(),dirStr);
 35         if(!dir.exists()){
 36             dir.mkdirs();
 37         }
 38         return dir;
 39     }
 40     
 41     // 创建文件
 42     public File createFile(String filePath,String fileName){
 43         
 44         File dir = createDir(filePath);
 45         File file = new File(dir,fileName);
 46         
 47         try {
 48             if(!file.exists()){
 49                 file.createNewFile();
 50             }
 51         } catch (IOException e) {
 52             // TODO Auto-generated catch block
 53             e.printStackTrace();
 54         }
 55         return file;
 56     }
 57     
 58     /* 向指定文件中写入数据,数据位一个字符串
 59      * path: 文件路径
 60      * fileName:文件名
 61      * content:待写入字符串
 62      * */
 63     public File writeData(String path,String fileName,String content){
 64         
 65         File file = createFile(path,fileName);
 66         if(file == null) return null;
 67         PrintWriter pw = null;
 68         boolean r = false;
 69         
 70         try {
 71             pw = new PrintWriter(file);
 72             pw.println(content);
 73             pw.flush();
 74             r = true;
 75         } catch (FileNotFoundException e) {
 76             // TODO Auto-generated catch block
 77             e.printStackTrace();
 78         }finally{
 79             pw.close();
 80         }
 81         return file;
 82     }
 83     
 84     /* 向指定文件中写入数据,数据是一个输入流
 85      * path:文件路径
 86      * fileName:文件名
 87      * is:输入流
 88      * */
 89     public File writeData(String path,String fileName,InputStream is){
 90         
 91         File file = createFile(path,fileName);
 92         if(file == null) return null;
 93         FileOutputStream fos = null;
 94         byte buffer[] = new byte[1024*4];
 95         int count;
 96         
 97         try {
 98             fos = new FileOutputStream(file);
 99             while( (count=is.read(buffer))>0){
100                 fos.write(buffer, 0, count);
101             }
102             fos.flush();
103         } catch (FileNotFoundException e) {            
104             // TODO Auto-generated catch block
105             e.printStackTrace();
106         } catch (IOException e) {
107             // TODO Auto-generated catch block
108             e.printStackTrace();
109         }finally{
110             if(fos != null)
111                 try {
112                     fos.close();
113                 } catch (IOException e) {
114                     // TODO Auto-generated catch block
115                     e.printStackTrace();
116                 }
117         }
118         return file;
119     }
120 }
SaveDataSDCard.java

 

posted @ 2015-05-25 15:00  壬子木  阅读(301)  评论(0)    收藏  举报