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 }
查看数据存储 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 }
 
                    
                
 
 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号