安卓数据在外存中的保存与读取
安卓开发中,必不可少的就是数据的保存与读取,安卓手机中的SD卡就是外部存储空间。
数据保存
我在第一个安卓项目中加入了安卓数据的保存与读取。
//把用户名和密码存储到外存中
File sdCard = Environment.getExternalStorageDirectory();
File directory = new File(sdCard.getAbsolutePath()+"/amyandroidtest");
directory.mkdirs();
File file = new File(directory,"textfile.txt");
try{
FileOutputStream fos = new FileOutputStream(file);
OutputStreamWriter osw = new OutputStreamWriter(fos);
osw.write(username+" "+password);
osw.flush();
osw.close();
Toast.makeText(getApplicationContext(), "用户名已写入内存", Toast.LENGTH_SHORT).show();
第一句获取系统外存空间地址
第二句创建目标文件夹
第三句检测是否是否存在该文件夹,如果没有就创建文件夹
第四句创建目标文档,用于存储和读取数据
try后面就是创建输出流,把数据写入目标文件中去了
这就是目标文件与文件夹内容。
读取数据
我的需求是在从第二次开始的每一次打开app都把上一次成功登录的用户名和密码读出然后写到app的用户名和密码上。
前面提到了app的生命周期,onCreate()一般用于实例化对象、只执行一次,也是第一个执行的生命周期方法,所以在里面写读取数据的代码。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
File sdCard = Environment.getExternalStorageDirectory();
File directory = new File(sdCard.getAbsolutePath()+"/amyandroidtest");
File targetFile = new File(directory.getAbsolutePath()+"/textfile.txt");
if( targetFile.exists() ){
try{
FileInputStream fis = new FileInputStream(targetFile);
InputStreamReader isr = new InputStreamReader(fis);
char[] content = new char[(int) targetFile.length()];
String psw = new String();
isr.read(content);
isr.close();
int flag = 0;
for(int i=0;i<targetFile.length();i++){
if( content[i] == ' ' ){
flag = i+1;
EditText etun = (EditText) findViewById(R.id.username_input);
etun.setText(content, 0, i);
}
psw = psw + content[i];
}
psw = psw.substring(flag, (int)targetFile.length());
char[] pswChar = psw.toCharArray();
EditText etps = (EditText) findViewById(R.id.password_input);
etps.setText(pswChar, 0, pswChar.length);
}catch(Exception e){
e.printStackTrace();
}
}
}
读取数据代码和保存数据基本一致,只是把输出流的out换成输入流的in。
第二次开始的每一次执行的app就是这样了:
按一下Go就可以直接登录