基础学习总结(三)--文本、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= ...
随机推荐
- Android SDK安装时碰到的问题之解决办法
问题:hostname in certificate didn't match: <dl-ssl.google.com> != <www.google.com> Fetchin ...
- ireport启动闪退问题
安装好ireport之后,双击ireport.exe启动程序只是掠过启动画面便毫无反应, 后来在网上找了下解决方法,才知道只因为ireport与jdk8不兼容, 于是下载了jdk6,并在ireport ...
- 【ZZ】C 语言中的指针和内存泄漏 & 编写高效的C程序与C代码优化
C 语言中的指针和内存泄漏 http://www.ibm.com/developerworks/cn/aix/library/au-toughgame/ 本文讨论了几种在使用动态内存分配时可以避免的陷 ...
- 高级I/O之readn和writen函数
管道.FIFO以及某些设备,特别是终端.网络和STREAMS设备有下列两种性质: (1)一次read操作所返回的数据可能少于所要求的数据,即使还没有达到文件尾端也可能是这样.这不是一个错误,应当继续读 ...
- 如何用jquery操作table的方法
今天我在做你约我吧交友www.niyuewo.com网项目时遇到一个问题,就是如何用qjuery控制table的添加.编辑与删除,经过网上查资料发现用jquery很容易实现,在此整理下来供大家参考: ...
- TRF7960天线参数试验
CA1焊47pF就好了,不大用调,主要调CA2的值 图中CA2焊100pF时,读卡距离2cm左右 27pF 3.5cm左右 不焊 4cm左右 47pF 5cm左右 现在手 ...
- 《Entity Framework 6 Recipes》中文翻译——第十二章自定义EntityFramework对象(一)
本章的方法探讨一些可以应用于对象和实体框架的流程定制.这些方法涵盖了许多“幕后”的东西,它可以使你的代码更统一,比如通过更关注应用程序核心业务规则执行的细节,应用范围更广泛.我们开始本章的一个方法,告 ...
- json2使用方法
例子1: //直接声明json数据结构 var myJSONObject = {"bindings": [ {"ircEvent": "PRIVMSG ...
- Android SQLite 数据库详细介绍
Android SQLite 数据库详细介绍 我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在很多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用 ...
- 解决浏览器background-image属性不支持css3动画
问题 最近在使用background-image属性来实现css3的逐帧动画时,碰到了个问题.在chrome浏览器上,background-image属性是支持css3动画的,但是到了firefox上 ...