基础学习总结(三)--文本、SD卡数据读写
简单的文本数据写入文件不需要权限,读写SD卡在4.0版本前需要写权限、在4.0后需要读写权限
布局:
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- tools:context=".MainActivity" >
- <EditText android:id="@+id/et_number"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:phoneNumber="true"
- android:hint="请输入手机号" />
- <EditText
- android:id="@+id/et_pwd"
- android:layout_width="fill_parent"
- android:layout_height="match_parent"
- android:hint="请输入密码"
- android:inputType="textPassword" />
- <CheckBox android:id="@+id/cb_remerber_pwd"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:checked="true"
- android:text="记住密码" />
- <Button android:id="@+id/btn_Login"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="登陆"
- />
- </LinearLayout>
Manifest.xml添加权限
- <!-- 写入外部设备(sdka)的权限 -->
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
MainActivity:
- public class MainActivity extends Activity implements OnClickListener {
- private static final String TAG = "MainActivity";
- private EditText etNumber;
- private EditText etPwd;
- private CheckBox cbRemerber;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- //获取控件中数据
- etNumber = (EditText)findViewById(R.id.et_number);
- etPwd=(EditText)findViewById(R.id.et_pwd);
- cbRemerber=(CheckBox)findViewById(R.id.cb_remerber_pwd);
- Button btnLogin = (Button)findViewById(R.id.btn_Login);
- //添加点击事件
- btnLogin.setOnClickListener(this);
- //获取SD卡数据
- Map<String,String> userInfo=UtilsOfSDCard.getUserInfo(this);
- if(userInfo!=null){
- etNumber.setText(userInfo.get("number"));
- etPwd.setText(userInfo.get("pwd"));
- }
- }
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- //1.取出账号,密码
- String Number=etNumber.getText().toString();
- String Pwd=etPwd.getText().toString();
- //判断是否有值,弹出吐司
- if(TextUtils.isEmpty(Number) || TextUtils.isEmpty(Pwd)){
- Toast.makeText(this, "请正确数据账号、密码", Toast.LENGTH_SHORT).show();
- return;
- }
- //2.判断cb是否被选中
- if(cbRemerber.isChecked()){
- Log.i(TAG, "记住密码"+Number+","+Pwd);
- boolean isSuccess=UtilsOfSDCard.saveUserInfo(this,Number, Pwd);
- if(isSuccess)
- Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show();
- else
- Toast.makeText(this, "保存失败", Toast.LENGTH_SHORT).show();
- }
- //3.登陆成功
- Toast.makeText(this, "登陆成功", Toast.LENGTH_SHORT).show();
- }
- }
UtilsOfSDCard类:
- public class UtilsOfSDCard {
- //保存信息到sd卡
- public static boolean saveUserInfo(Context context, String number,String pwd){
- try {
- //获取SD卡状态
- String state=Environment.getExternalStorageState();
- //判断SD卡状态
- if(!Environment.MEDIA_MOUNTED.equals(state))
- {
- return false;
- }
- //动态获取SD卡路径
- File sdCardFile = Environment.getExternalStorageDirectory();
- File f=new File(sdCardFile,"qqLogin1.txt");
- //写入流
- FileOutputStream fos=new FileOutputStream(f);
- String data=number+"##"+pwd;
- fos.write(data.getBytes());
- fos.flush();
- fos.close();
- return true;
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return false;
- }
- //返回信息
- public static Map<String,String> getUserInfo(Context context){
- try {
- String state=Environment.getExternalStorageState();
- if(!Environment.MEDIA_MOUNTED.equals(state))
- {
- return null;
- }
- File sdCartFile=Environment.getExternalStorageDirectory();
- File f=new File(sdCartFile,"qqLogin1.txt");
- BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(f)));
- String text=br.readLine();
- br.close();
- if(!TextUtils.isEmpty(text)){
- Map<String,String> userInfoMap=new HashMap<String,String>();
- String[] split = text.split("##");
- userInfoMap.put("number", split[0]);
- userInfoMap.put("pwd", split[1]);
- Log.w("UtilsOfSDCard", split[0]+","+split[1]);
- return userInfoMap;
- }
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return null;
- }
- }
Utils类:
- public class Utils {
- /*
- * 保存用户信息
- * */
- public static boolean saveUserInfo(String number,String pwd){
- try {
- String path="/data/data/com.cui.qqlogin/QQLogin.txt";
- //写入流
- FileOutputStream fs=new FileOutputStream(path);
- String data=number+"##"+pwd;
- fs.write(data.getBytes());
- fs.flush();
- fs.close();
- return true;
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return false;
- }
- public static boolean saveUserInfo(Context context, String number,String pwd){
- try {
- //动态获取文件路径
- File filesDir = context.getFilesDir();
- File f=new File(filesDir,"QQLogin.txt");
- //写入流
- FileOutputStream fs=new FileOutputStream(f);
- String data=number+"##"+pwd;
- fs.write(data.getBytes());
- fs.flush();
- fs.close();
- return true;
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return false;
- }
- public static Map<String,String> getUserInfo(){
- try {
- String path="/data/data/com.cui.qqlogin/QQLogin.txt";
- //输出流
- FileInputStream fis=new FileInputStream(path);
- //字符流
- BufferedReader reader=new BufferedReader(new InputStreamReader(fis));
- String text = reader.readLine();
- if(!TextUtils.isEmpty(text)){
- String[] split=text.split("##");
- Map<String,String> userofMap=new HashMap<String,String>();
- userofMap.put("number", split[0]);
- userofMap.put("pwd", split[1]);
- return userofMap;
- }
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return null;
- }
- public static Map<String,String> getUserInfo(Context context){
- try {
- //String path="/data/data/com.cui.qqlogin/QQLogin.txt";
- //动态获取文件路径
- File filesDir = context.getFilesDir();
- File f=new File(filesDir,"QQLogin.txt");
- //输出流
- FileInputStream fis=new FileInputStream(f);
- //字符流
- BufferedReader reader=new BufferedReader(new InputStreamReader(fis));
- String text = reader.readLine();
- reader.close();
- if(!TextUtils.isEmpty(text)){
- String[] split=text.split("##");
- Map<String,String> userofMap=new HashMap<String,String>();
- userofMap.put("number", split[0]);
- userofMap.put("pwd", split[1]);
- return userofMap;
- }
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return null;
- }
- }
====================插播快捷键
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
- public class UtilsOfSharedPreferences {
- //保存信息到sd卡
- public static boolean saveUserInfo(Context context, String number,String pwd){
- try {
- sp=context.getSharedPreferences("cuidemo", context.MODE_PRIVATE);
- //获得一个编辑对象
- Editor edit = sp.edit();
- edit.putString("number", number);
- edit.putString("pwd", pwd);
- edit.commit();
- return true;
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return false;
- }
- //返回信息
- public static Map<String,String> getUserInfo(Context context){
- SharedPreferences sp=context.getSharedPreferences("cuidemo", context.MODE_PRIVATE);
- String number=sp.getString("number", null);
- String pwd=sp.getString("pwd", null);
- if(!TextUtils.isEmpty(number)&& !TextUtils.isEmpty(pwd)){
- Map<String,String> userInfoMap=new HashMap<String,String>();
- userInfoMap.put("number", number);
- userInfoMap.put("pwd", pwd);
- return userInfoMap;
- }
- return null;
- }
- }
权限相关:
1. 私有文件
Context.MODE_PRIVATE
2. 可读文件
Context.MODE_WORLD_READABLE
3. 可写文件
Context.MODE_WORLD_WRITEABLE
4. 可读可写文件.
Context.MODE_WORLD_WRITEABLE+Context.MODE_WORLD_READABLE
权限二进制图解:
基础学习总结(三)--文本、SD卡数据读写的更多相关文章
- JavaScript 基础 学习(三)
JavaScript 基础 学习(三) 事件三要素 1.事件源: 绑定在谁身上的事件(和谁约定好) 2.事件类型: 绑定一个什么事件 3.事件处理函数: 当行为发生的时候,要执行哪一个函数 ...
- 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(三)-SD卡的操作流程
其他链接 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 ...
- 使用STM32F103ZET霸道主板实现SD卡的读写(非文件系统)
了解STM32F103ZET是高容量多管脚的芯片 了解SD读写线路图 了解SD的基地址 阅读STM32F10xx英文参考 SDIO那章,我们编写代码边看文档解析 建工程,打开包含所有包括外设库函数的样 ...
- 【译】如何在 Android 5.0 上获取 SD卡 的读写权限
因为最近项目需要,涉及到 SD卡 的读写操作,然而申请 <!-- 读写权限 --> <uses-permission android:name="android.permi ...
- SD卡spi读写流程
SD卡spi读写流程 1.SD卡的命令格式: SD卡的指令由6字节(Byte)组成,如下: Byte1:0 1 x x x x x x(命令号,由指令标志定义,如CMD39为100111即16进制0x ...
- 快速解决设置Android 23.0以上版本对SD卡的读写权限无效的问题
快速解决设置Android 23.0以上版本对SD卡的读写权限无效的问题 转 https://www.jb51.net/article/144939.htm 今天小编就为大家分享一篇快速解决设置And ...
- 用 S5PV210 学习 Linux (三) SD卡下载
学习地址:http://edu.51cto.com/lesson/id-63015.html http://blog.csdn.net/karven_/article/details/52015325 ...
- 基于stm32f103zet6的FAT16文件系统学习0(读SD卡扇区)
SD卡已经看了两天了,主要是因为测试出来的卡容量不对,所以一直找原因,最终还是发现了,总比不过是单位上面出现了问题,或许是之前没有接触到SD的缘故吧,所以对其中的一些寄存器很不了解,一切都是重新开始, ...
- java网络爬虫基础学习(三)
尝试直接请求URL获取资源 豆瓣电影 https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort= ...
随机推荐
- 关于dispatchTouchEvent, onInterceptTouchEvent, onTouchEvent的分发机制浅析
虽说这个问题不是很难...动动手就能看出答案...但是似乎不太容易理解...几次尝试把这个问题说明白....但是好像感觉说不明白....(顿时想起了那句话----说不明白就是自己还不明白! 我怎么可能 ...
- hdu1051 Wooden Sticks
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1051 大意:求最少升序序列的个数. #include <cstdio> #include &l ...
- github使用成长记
学校里一直都有自己写一些网页,一方面为了学习熟练技能,另一方面也是兴趣所在.但是独乐乐不如众乐乐,一直向往有那么一个平台能把自己做得东西分享给广大网友,并且想借着分享的契机和各位程序猿交流学习心得(这 ...
- ArcGIS: version not specified. You must call RuntimeManager.Bind before creat
打开program.cs把ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);这句放到Applicatio ...
- Flask的部署
当前对部署flask的一些学习: 1.全局安装nginx 1.1 nginx的配置文件怎么写? $ sudo rm /etc/nginx/sites-enabled/default $ sudo to ...
- Halcon C++混合编程学习之Qt 实现检测焊接点
1 # include "HalconCpp.h" # include "HDevThread.h" # include <X11/Xlib.h> ...
- 关于Windows常用命令
本文引用自:http://ylbook.com/cms/computer/mingling.htm Windows Run命令: calc———–启动计算器certmgr.msc—-证书管理实用程序c ...
- 历经曲折的freescale
从来没有想到自己在大学最信任的队友会突然放弃,,为了这个,,我可以说放弃了很多,,这几天可以我也不知道怎么办了,,我想不通的是为什么可以这样,为什么可以这么不负责任,,为什么这么自私,,这些我永远都不 ...
- 【基础数学知识】UVa 11314 - Hardly Hard
Problem H HARDLY HARD You have been given the task of cutting out a quadrilateral slice of cake out ...
- Ehcache(2.9.x) - API Developer Guide, Cache Usage Patterns
There are several common access patterns when using a cache. Ehcache supports the following patterns ...