(九)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 程序运行界面如下所示

时间: 2024-10-21 22:34:47

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

(十)android 中数据存储与访问——使用SharedPreferences保存数据

10.1 SharedPreferences概述 数据存储方式有五种,前面介绍的是通过IO流以文件的方式存储数据,这里学习的SharedPreferences方式保存的数据,主要保存的是用户的偏好设置. 很多时候,我们开发的程序是需要向用户提供软件参数设置功能的.用户根据自己的兴趣爱好对软件的各项参数进行配置,以符合自己的使用习惯. 例如,我们使用eclipse的时候,可以设置字体的显示颜色.大小等.Eclipse内部使用的是xml格式的文件来保存软件的配置参数. 如果我们要在安卓中保存用户在软

Android中数据存储方式一:文件形式

总结在Android中,一共有数据存储的5种方式.今天做一个笔记的整理.关于以文件形式如何来保存数据. 1.在activity_main.xml设计好布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_pa

无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)

1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.demo1" /> 上面targetPackage指定的包要和应用的package相同. (2)在清单文件中ap

Android中数据存储(一)

国庆没有给国家添堵,没有勾搭妹子,乖乖的写着自己的博客..... 本文将为大家介绍Android中数据存储的五种方式,数据存储可是非常重要的知识哦. 一,文件存储数据 ①在ROM存储数据 关于在ROM读写文件,可以使用java中IO流来读写,但是谷歌很人性化,直接给你封装了一下,所以就有了Context提供的这两个方法:FileInputStream openFileInput(String name); FileOutputStream openFileOutput(String name,

Android中数据存储之SharedPreferences

import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; /** * SharedPreferences是一种轻型的数据存储方式,它的本质是基于XML文件存储Key-Value键值对数据,<br/> * 通常用来存储一些简单的配置信息.其存储位置在/data/data/<包名>/shared_pr

【Android】数据存储-java IO流文件存储

1.数据持久化:将在内存中的瞬时数据保存在存储设备中.瞬时数据:设备关机数据丢失.持久化技术提供一种机制可以让数据在瞬时状态和持久状态之间转换. 2.Android中简单的三种存储方式:文件存储.SharedPreference 存储以及数据库存储. 1.文件存储 :不对数据作任何处理,将数据原封不动地存储到文件中,适合存储一些简单的文本数据和二进制数据. a.将数据存储到文件中 Context类提供了一个openFileOutput()方法,可以用于将数据存储到文件中.这个方法接收两个参数,第

[android] 保存文件到手机内存

1. 界面的准备工作,普通登录界面,采用线性布局和相对布局. <Checkbox/>有个属性 android:checked=”true”,默认选中状态,相对布局里面<Button/>位于右边android:layout_alignParentRight=”true”,位于父控件的右面.密码框星号显示android:inputType=”textPassword” 2. 遇到device not found等错误可以直接忽略掉,布局文件属性里面绑定点击方法,传入的参数View对象代

【Android】数据存储和访问

一.SharedPreferences 2.SQLite 原文地址:https://www.cnblogs.com/SeasonBubble/p/11956005.html

保存文件到手机内存

一 UI Code <RelativeLayout 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"