基础学习总结(三)--文本、SD卡数据读写
简单的文本数据写入文件不需要权限,读写SD卡在4.0版本前需要写权限、在4.0后需要读写权限
布局:
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="wrap_content" 5 android:orientation="vertical" 6 tools:context=".MainActivity" > 7 8 <EditText android:id="@+id/et_number" 9 android:layout_width="fill_parent" 10 android:layout_height="wrap_content" 11 android:phoneNumber="true" 12 android:hint="请输入手机号" /> 13 14 <EditText 15 android:id="@+id/et_pwd" 16 android:layout_width="fill_parent" 17 android:layout_height="match_parent" 18 android:hint="请输入密码" 19 android:inputType="textPassword" /> 20 21 <CheckBox android:id="@+id/cb_remerber_pwd" 22 android:layout_width="wrap_content" 23 android:layout_height="wrap_content" 24 android:checked="true" 25 android:text="记住密码" /> 26 27 <Button android:id="@+id/btn_Login" 28 android:layout_width="wrap_content" 29 android:layout_height="wrap_content" 30 android:text="登陆" 31 /> 32 33 </LinearLayout>
Manifest.xml添加权限
1 <!-- 写入外部设备(sdka)的权限 --> 2 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 3 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
MainActivity:
1 public class MainActivity extends Activity implements OnClickListener { 2 private static final String TAG = "MainActivity"; 3 private EditText etNumber; 4 private EditText etPwd; 5 private CheckBox cbRemerber; 6 7 @Override 8 protected void onCreate(Bundle savedInstanceState) { 9 super.onCreate(savedInstanceState); 10 setContentView(R.layout.activity_main); 11 //获取控件中数据 12 etNumber = (EditText)findViewById(R.id.et_number); 13 etPwd=(EditText)findViewById(R.id.et_pwd); 14 cbRemerber=(CheckBox)findViewById(R.id.cb_remerber_pwd); 15 Button btnLogin = (Button)findViewById(R.id.btn_Login); 16 //添加点击事件 17 btnLogin.setOnClickListener(this); 18 //获取SD卡数据 19 Map<String,String> userInfo=UtilsOfSDCard.getUserInfo(this); 20 if(userInfo!=null){ 21 etNumber.setText(userInfo.get("number")); 22 etPwd.setText(userInfo.get("pwd")); 23 } 24 } 25 26 @Override 27 public void onClick(View v) { 28 // TODO Auto-generated method stub 29 //1.取出账号,密码 30 String Number=etNumber.getText().toString(); 31 String Pwd=etPwd.getText().toString(); 32 //判断是否有值,弹出吐司 33 if(TextUtils.isEmpty(Number) || TextUtils.isEmpty(Pwd)){ 34 Toast.makeText(this, "请正确数据账号、密码", Toast.LENGTH_SHORT).show(); 35 return; 36 } 37 //2.判断cb是否被选中 38 if(cbRemerber.isChecked()){ 39 Log.i(TAG, "记住密码"+Number+","+Pwd); 40 boolean isSuccess=UtilsOfSDCard.saveUserInfo(this,Number, Pwd); 41 if(isSuccess) 42 Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show(); 43 else 44 Toast.makeText(this, "保存失败", Toast.LENGTH_SHORT).show(); 45 } 46 47 //3.登陆成功 48 Toast.makeText(this, "登陆成功", Toast.LENGTH_SHORT).show(); 49 } 50 51 52 }
UtilsOfSDCard类:
1 public class UtilsOfSDCard { 2 //保存信息到sd卡 3 public static boolean saveUserInfo(Context context, String number,String pwd){ 4 try { 5 //获取SD卡状态 6 String state=Environment.getExternalStorageState(); 7 //判断SD卡状态 8 if(!Environment.MEDIA_MOUNTED.equals(state)) 9 { 10 return false; 11 } 12 //动态获取SD卡路径 13 File sdCardFile = Environment.getExternalStorageDirectory(); 14 File f=new File(sdCardFile,"qqLogin1.txt"); 15 //写入流 16 FileOutputStream fos=new FileOutputStream(f); 17 18 String data=number+"##"+pwd; 19 fos.write(data.getBytes()); 20 fos.flush(); 21 fos.close(); 22 return true; 23 } catch (Exception e) { 24 // TODO Auto-generated catch block 25 e.printStackTrace(); 26 } 27 28 return false; 29 } 30 31 //返回信息 32 public static Map<String,String> getUserInfo(Context context){ 33 try { 34 String state=Environment.getExternalStorageState(); 35 if(!Environment.MEDIA_MOUNTED.equals(state)) 36 { 37 return null; 38 } 39 File sdCartFile=Environment.getExternalStorageDirectory(); 40 File f=new File(sdCartFile,"qqLogin1.txt"); 41 BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(f))); 42 String text=br.readLine(); 43 br.close(); 44 if(!TextUtils.isEmpty(text)){ 45 Map<String,String> userInfoMap=new HashMap<String,String>(); 46 String[] split = text.split("##"); 47 userInfoMap.put("number", split[0]); 48 userInfoMap.put("pwd", split[1]); 49 Log.w("UtilsOfSDCard", split[0]+","+split[1]); 50 return userInfoMap; 51 } 52 53 } catch (Exception e) { 54 // TODO Auto-generated catch block 55 e.printStackTrace(); 56 } 57 58 return null; 59 } 60 }
Utils类:
1 public class Utils { 2 /* 3 * 保存用户信息 4 * */ 5 public static boolean saveUserInfo(String number,String pwd){ 6 7 try { 8 String path="/data/data/com.cui.qqlogin/QQLogin.txt"; 9 //写入流 10 FileOutputStream fs=new FileOutputStream(path); 11 String data=number+"##"+pwd; 12 fs.write(data.getBytes()); 13 fs.flush(); 14 fs.close(); 15 return true; 16 } catch (Exception e) { 17 // TODO Auto-generated catch block 18 e.printStackTrace(); 19 } 20 21 return false; 22 } 23 24 public static boolean saveUserInfo(Context context, String number,String pwd){ 25 26 try { 27 //动态获取文件路径 28 File filesDir = context.getFilesDir(); 29 File f=new File(filesDir,"QQLogin.txt"); 30 //写入流 31 FileOutputStream fs=new FileOutputStream(f); 32 String data=number+"##"+pwd; 33 fs.write(data.getBytes()); 34 fs.flush(); 35 fs.close(); 36 return true; 37 } catch (Exception e) { 38 // TODO Auto-generated catch block 39 e.printStackTrace(); 40 } 41 42 return false; 43 } 44 45 public static Map<String,String> getUserInfo(){ 46 try { 47 String path="/data/data/com.cui.qqlogin/QQLogin.txt"; 48 //输出流 49 FileInputStream fis=new FileInputStream(path); 50 //字符流 51 BufferedReader reader=new BufferedReader(new InputStreamReader(fis)); 52 String text = reader.readLine(); 53 if(!TextUtils.isEmpty(text)){ 54 String[] split=text.split("##"); 55 Map<String,String> userofMap=new HashMap<String,String>(); 56 userofMap.put("number", split[0]); 57 userofMap.put("pwd", split[1]); 58 return userofMap; 59 } 60 61 } catch (Exception e) { 62 // TODO Auto-generated catch block 63 e.printStackTrace(); 64 } 65 66 return null; 67 } 68 69 public static Map<String,String> getUserInfo(Context context){ 70 try { 71 //String path="/data/data/com.cui.qqlogin/QQLogin.txt"; 72 //动态获取文件路径 73 File filesDir = context.getFilesDir(); 74 File f=new File(filesDir,"QQLogin.txt"); 75 //输出流 76 FileInputStream fis=new FileInputStream(f); 77 //字符流 78 BufferedReader reader=new BufferedReader(new InputStreamReader(fis)); 79 String text = reader.readLine(); 80 reader.close(); 81 if(!TextUtils.isEmpty(text)){ 82 String[] split=text.split("##"); 83 Map<String,String> userofMap=new HashMap<String,String>(); 84 userofMap.put("number", split[0]); 85 userofMap.put("pwd", split[1]); 86 return userofMap; 87 } 88 89 } catch (Exception e) { 90 // TODO Auto-generated catch block 91 e.printStackTrace(); 92 } 93 94 return null; 95 } 96 }
====================插播快捷键
Ctrl+N 快速新建
Ctrl+H 选中项目中搜索
Ctrl+L 跳转到指定行
Ctrl+F 在文本中查找内容
====================
文件存储地址:
this.getFilesDir(); // /data/data/包名/files
this.getCacheDir(); // /data/data/包名/cache
openFileOutput("aa.txt", 0); /data/data/包名/files/aa.txt
context.getSharedPreferences("cuidemo", context.MODE_PRIVATE); /data/data/包名/shared_prefs/cuidemo.xml
1 public class UtilsOfSharedPreferences { 2 //保存信息到sd卡 3 public static boolean saveUserInfo(Context context, String number,String pwd){ 4 try { 5 sp=context.getSharedPreferences("cuidemo", context.MODE_PRIVATE); 6 //获得一个编辑对象 7 Editor edit = sp.edit(); 8 edit.putString("number", number); 9 edit.putString("pwd", pwd); 10 edit.commit(); 11 return true; 12 } catch (Exception e) { 13 // TODO Auto-generated catch block 14 e.printStackTrace(); 15 } 16 return false; 17 } 18 19 //返回信息 20 public static Map<String,String> getUserInfo(Context context){ 21 SharedPreferences sp=context.getSharedPreferences("cuidemo", context.MODE_PRIVATE); 22 String number=sp.getString("number", null); 23 String pwd=sp.getString("pwd", null); 24 25 if(!TextUtils.isEmpty(number)&& !TextUtils.isEmpty(pwd)){ 26 Map<String,String> userInfoMap=new HashMap<String,String>(); 27 userInfoMap.put("number", number); 28 userInfoMap.put("pwd", pwd); 29 return userInfoMap; 30 } 31 32 return null; 33 } 34 }
权限相关:
1. 私有文件
Context.MODE_PRIVATE
2. 可读文件
Context.MODE_WORLD_READABLE
3. 可写文件
Context.MODE_WORLD_WRITEABLE
4. 可读可写文件.
Context.MODE_WORLD_WRITEABLE+Context.MODE_WORLD_READABLE
权限二进制图解:
作者:大胖儿在努力
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。