首页 > 代码库 > (九)android 中数据存储与访问——保存文件到手机内存

(九)android 中数据存储与访问——保存文件到手机内存

9.1手机的存储区域

手机的存储区域通常有两个地方:一:手机内部存储空间,理解成一块微硬盘/data/data/;二:外部存储空间SD卡

9.2方法捕获异常的原则

如果方法有返回值,则用try catch捕获,如果方法的返回值是Void类型,则使用throws抛出异常

9.3 上下文Context

Context:是一个类,提供一些方便的api 可以得到应用程序的环境,例如:环境的包名,安装路径,资源路径,资产的路径

9.4 保存文件到手机内存——登陆界面例子程序

9.4.1 项目需求

用户登陆界面如下所示,当勾选保存密码时,则将用户名和密码保存到手机内存上,当下次打开登陆界面时,将自动从手机内存中取出用户名和密码回显在界面上。

9.4.2 工程目录结构如下所示

9.4.3 activity_main.xml文件

<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="match_parent"    android:orientation="vertical"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.example.logintest.MainActivity" >    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="请输入用戶名"        android:textSize="18dp" />    <EditText        android:id="@+id/et_username"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:textSize="18dp" />    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="请输入密碼"        android:textSize="18dp" />    <EditText        android:id="@+id/et_pwd"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:inputType="numberPassword"        android:textSize="18dp" />    <RadioGroup        android:id="@+id/rg_mode"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:orientation="horizontal" >        <RadioButton            android:id="@+id/rb_private"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="私有的" />        <RadioButton            android:id="@+id/rb_public"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="公有的" />        <RadioButton            android:id="@+id/rb_readable"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="可读的" />    </RadioGroup>    <RelativeLayout        android:layout_width="fill_parent"        android:layout_height="wrap_content" >        <CheckBox            android:id="@+id/cb_checked"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:checked="true"            android:text="记住密码"            android:textSize="18dp" />        <Button            android:id="@+id/bt_login"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentRight="true"            android:text="登陆"            android:textSize="18dp" />    </RelativeLayout>   </LinearLayout>

9.4.4 FileInfo.java文件

package com.example.logintest.service;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.util.HashMap;import java.util.Map;import android.content.Context;public class FileInfo {    /**     * 保存文件到context.getFilesDir()中     *      * @param context     *            上下文     * @param username     *            用戶名     * @param Pwd     *            用戶密碼     * @return     */    public static boolean saveFileUserInfo(Context context, String username,            String Pwd) {        File file = new File(context.getFilesDir(), "userinfo.txt");        // context.openFileOutput(file, mode)        try {            FileOutputStream fos = new FileOutputStream(file);            // fos.write(username+"##"+Pwd).getB;            fos.write((username + "##" + Pwd).getBytes());            fos.close();            return true;        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();            return false;        }    }    /**     * 从文件中读取用户的信息,并保存在Map对象中 從context.getFilesDir()中获得文件目录     *      * @param context     * @return     */    public static Map<String, String> getUserInfo(Context context) {        File file = new File(context.getFilesDir(), "userinfo.txt");        FileInputStream fis;        try {            fis = new FileInputStream(file);            BufferedReader br = new BufferedReader(new InputStreamReader(fis));            String str = br.readLine();            String infos[] = str.split("##");            Map<String, String> map = new HashMap<String, String>();            map.put("username", infos[0]);            map.put("userpwd", infos[1]);            return map;        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();            return null;        }    }}

9.4.5 MainActivity.java文件

package com.example.logintest;import java.util.Map;import com.example.logintest.service.FileInfo;import android.annotation.SuppressLint;import android.app.Activity;import android.os.Bundle;import android.text.TextUtils;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.CheckBox;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity implements OnClickListener {    private static final String TAG = "MainActivity";    private EditText et_username;    private EditText et_pwd;    private CheckBox cb_checked;    private Button bt_login;    @Override    protected void onCreate(Bundle savedInstanceState) {        // TODO Auto-generated method stub        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        et_username = (EditText) this.findViewById(R.id.et_username);        et_pwd = (EditText) this.findViewById(R.id.et_pwd);        cb_checked = (CheckBox) this.findViewById(R.id.cb_checked);        bt_login = (Button) this.findViewById(R.id.bt_login);        bt_login.setOnClickListener(this);        Map<String, String> map = FileInfo.getUserInfo(this);        if (map != null) {            et_username.setText(map.get("username"));            et_pwd.setText(map.get("userpwd"));        }    }    @SuppressLint("ShowToast")    @Override    public void onClick(View v) {        // TODO Auto-generated method stub        String userName = et_username.getText().toString().trim();        String userPwd = et_pwd.getText().toString().trim();        if (TextUtils.isEmpty(userName) || TextUtils.isEmpty(userPwd)) {            Toast.makeText(this, "用户名为空或用户密码为空", 1).show();        } else {            if (cb_checked.isChecked()) {                Log.i(TAG, "请保存密码");                if (FileInfo.saveFileUserInfo(this, userName, userPwd)) {                    Log.i(TAG, "用戶信息保存成功");                }            }            if ("zhangsan".equals(userName) && "123".equals(userPwd)) {                Toast.makeText(this, "用户登陆", 1).show();            } else {                Toast.makeText(this, "登陆失敗", 1).show();            }        }    }}

9.4.6 程序运行界面如下所示

(九)android 中数据存储与访问——保存文件到手机内存