Android开发文件存储实例

2022-07-20,,,

android文件存储,有i/o流的方式存储,与java一样,还有一种android自己的sharepreferences存储方法。

下面看一个例子:

用i/o流的方式存储方法和sharepreferences存储方法,存放qq账号和密码,再次进入页面时,把存储在文件中的账号密码显示在上面。

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#e6e6e6"
    android:orientation="vertical">

    <imageview
        android:id="@+id/iv"
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:layout_centerhorizontal="true"
        android:layout_margintop="40dp"
        android:src="@drawable/head"
        />
    <linearlayout
        android:id="@+id/ll_number"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/iv"
        android:layout_centervertical="true"
        android:layout_marginbottom="5dp"
        android:layout_marginleft="10dp"
        android:layout_marginright="10dp"
        android:layout_margintop="15dp"
        android:background="#ffffff">

        <textview
            android:id="@+id/tv_number"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:text="账号"
            android:textcolor="#000"
            android:textsize="20sp"/>
        <edittext
            android:id="@+id/et_number"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginleft="5dp"
            android:background="@null"
            android:padding="10dp"/>
    </linearlayout>

    <linearlayout
        android:id="@+id/ll_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/ll_number"
        android:layout_centervertical="true"
        android:layout_marginleft="10dp"
        android:layout_marginright="10dp"
        android:background="#ffffff">

        <textview
            android:id="@+id/tv_password"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:text="密码"
            android:textcolor="#000"
            android:textsize="20sp"/>
        <edittext
            android:id="@+id/et_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginleft="5dp"
            android:background="@null"
            android:inputtype="textpassword"
            android:padding="10dp"/>
    </linearlayout>

    <button
        android:id="@+id/btn_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/ll_password"
        android:layout_marginleft="10dp"
        android:layout_marginright="10dp"
        android:layout_margintop="50dp"
        android:background="#3c8dc4"
        android:text="登录"
        android:textcolor="#ffffff"
        android:textsize="20sp"
        />
</relativelayout>

mainactivity.java

package com.example.saveqq;

import androidx.appcompat.app.appcompatactivity;

import android.os.bundle;
import android.text.textutils;
import android.view.view;
import android.widget.button;
import android.widget.edittext;
import android.widget.toast;

import java.util.map;

public class mainactivity extends appcompatactivity implements view.onclicklistener {

    private edittext user;
    private edittext password;
    private button button;
    @override
    protected void oncreate(bundle savedinstancestate) {
        super.oncreate(savedinstancestate);
        setcontentview(r.layout.activity_main);
        //1.初始化view
        initview();

        //2.若用户保存了信息,进行数据回写
        //i/o流方法
        map<string,string> userinfo = filesaveqq.getuserinfo(this);
        
        //sharedpreferences的方法
/*        map<string,string> userinfo = spsaveqq.getuserinfo(this);*/
            if ((userinfo!=null)){
                user.settext(userinfo.get("user"));
                password.settext(userinfo.get("password"));
            }
    }

    private void initview() {
        //控件的初始化
        user = (edittext)findviewbyid(r.id.et_number);
        password = (edittext)findviewbyid(r.id.et_password);
        button = (button) findviewbyid(r.id.btn_login);
        //2.设置按钮点击事件
        button.setonclicklistener(this);
    }

    @override
    public void onclick(view v) {
        //1.点击获取账号密码
        string  s_user = user.gettext().tostring().trim();
        string  s_password = password.gettext().tostring().trim();
        //2.检查用户名和密码是否为空
        if (textutils.isempty(s_user)){
            toast.maketext(this,"请输入qq账号",toast.length_long).show();
            return;
        }
        if (textutils.isempty(s_password)){
            toast.maketext(this,"请输入qq密码",toast.length_long).show();
            return;
        }
        toast.maketext(this,"登陆成功",toast.length_long).show();

        //3.保存用户信息
        //i/o流的方法
        boolean issavesuccess = filesaveqq.saveuserinfo(this,s_user,s_password);
        //用sharedpreferences的方法
/*        boolean issavesuccess = spsaveqq.saveuserinfo(this,s_user,s_password);*/
        if (issavesuccess){
            toast.maketext(this,"保存成功",toast.length_long).show();
        }else{
            toast.maketext(this,"保存失败",toast.length_long).show();
        }
    }
}

用i/o流方法

filesaveqq.java

package com.example.saveqq;

import android.content.context;


import java.io.fileinputstream;
import java.io.filenotfoundexception;
import java.io.fileoutputstream;
import java.io.ioexception;
import java.util.hashmap;
import java.util.map;

public class filesaveqq {
    //保存qq账号和密码到data.txt
    public static  boolean saveuserinfo(context context,string user,string password){
        try {
            //1.通过上下文获取文件输出流
            fileoutputstream fos = context.openfileoutput("data.txt",context.mode_append);
            //2.把数据写到文件中
            fos.write((user+":"+password).getbytes());
            fos.close();
            return true;
        } catch (ioexception e) {
            e.printstacktrace();
            return false;
        }
    }

    public static map<string,string> getuserinfo(context context){
        string content = "";
        try {
            fileinputstream fis = context.openfileinput("data,txt");
            byte[]  buffer = new byte[fis.available()];
            fis.read(buffer);
            map<string,string> usermap = new hashmap<string, string>();
            content = new string(buffer);
            string[] infos = content.split(":");
            usermap.put("user",infos[0]);
            usermap.put("password",infos[1]);
            fis.close();
            return usermap;
        } catch (ioexception e ) {
            return  null;
        }


    }
}

用sharedpreferences的方法

spsaveqq.java

package com.example.saveqq;

import android.annotation.suppresslint;
import android.content.context;
import android.content.sharedpreferences;

import java.util.hashmap;
import java.util.map;

//保存qq账号和密码到data.xml中
public class spsaveqq {
    public static boolean saveuserinfo(context context,string username,string password){
        sharedpreferences sp = context.getsharedpreferences("data",context.mode_private);
        sharedpreferences.editor editor = sp.edit();
        editor.putstring("username",username);
        editor.putstring("password",password);
        editor.commit();
        return true;
    }

    //从data.xml文件中获取存储的qq账号和密码
    public static map<string,string> getuserinfo(context context){
        sharedpreferences sp = context.getsharedpreferences("data",context.mode_private);
        string username = sp.getstring("username","");
        string password = sp.getstring("password","");
        map<string,string> usermap = new hashmap<>();
        usermap.put("username",username);
        usermap.put("password",password);
        return  usermap;
    }
}

运行截图:

重新进入页面:

完成。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

《Android开发文件存储实例.doc》

下载本文的Word格式文档,以方便收藏与打印。