欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android应用开发中数据的保存方式总结

程序员文章站 2024-02-23 14:07:10
一、保存文件到手机内存 /** * 保存数据到手机rom的文件里面. * @param context 应用程序的上下文 提供环境 *...

一、保存文件到手机内存

/**
   * 保存数据到手机rom的文件里面.
   * @param context 应用程序的上下文 提供环境
   * @param name 用户名
   * @param password 密码
   * @throws exception
   */
public static void savetorom(context context, string name , string password) throws exception{
    //file file = new file("/data/data/com.itheima.login/files/info.txt");
    file file = new file(context.getfilesdir(),"info.txt");//该文件在data下的files文件夹下getcachedir()在cache文件夹下 文件大小不要超过1mb
    fileoutputstream fos = new fileoutputstream(file);
    string txt = name+":"+password;
    fos.write(txt.getbytes());
    fos.flush();
    fos.close();
  }
/**
   * 获取保存的数据
   * @param context
   * @return
   */
public static map<string,string> getuserinfo(context context) {
    file file = new file(context.getfilesdir(),"info.txt");
    try {
      fileinputstream fis = new fileinputstream(file);
      //也可直接读取文件string result = streamtools.readfromstream(fis);
      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("password", infos[1]);
      return map;
    } catch(exception e) {

      e.printstacktrace();
      return null;
    }

  }
//最后可以直接调用上面的方法读取信息
map<string, string> map = getuserinfo(this);
if(map!=null){
textview.settext(map.get(“username”));
}

二、保存文件到sd卡
获取手机sd空间的大小:

file path = environment.getexternalstoragedirectory();
    statfs stat = new statfs(path.getpath());
    long blocksize = stat.getblocksize();
    long totalblocks = stat.getblockcount();
    long availableblocks = stat.getavailableblocks();
    long totalsize = blocksize*totalblocks;
    long availsize = blocksize * availableblocks;

    string totalstr = formatter.formatfilesize(this,totalsize);
    string availstr = formatter.formatfilesize(this, availsize);
    tv.settext("总空间"+totalstr+"\n"+"可用空间"+availstr);

加入写外部存储的权限:

<uses-permission android:name="android.permission.write_external_storage"/>

public static void save(string name ,string password) throws exception{
if (environment.getexternalstoragestate().equals(environment.media_mounted)){
file file = new file(environment.getexternalstoragedirectory(),"info.txt");
//也可直接写/sdcard/info.txt 先判断sd卡是否存在
    fileoutputstream fos = new fileoutputstream(file);
    string txt = name+":"+password;
    fos.write(txt.getbytes());
    fos.flush();
    fos.close();
// 使用randomaccessfile像文件追加内容fileoutputstream会把原有的文件内容清空
//randomaccessfile raf = new randomaccessfile(file,"rw");
//raf.seek(file.length()); 将文件指针移动到最后
//raf.write(name.getbytes()+password.getbytes());
//raf.close();
  }
}

//读取文件 加入读取权限
public static string read(){
      try {
        if (environment.getexternalstoragestate().equals(environment.media_mounted)){
          file sdcarddir = environment.getexternalstoragedirectory();
          fileinputstream fis = new fileinputstream(sdcarddir.getcanonicalpath() + "info.txt");
          bufferedreader br = new bufferedreader(new inputstreamreader(fis));
          stringbuilder sb = new stringbuilder("");
          string line = null;
          while ((line = br.readline())!= null){
            sb.append(line);
          }
          return sb.tostring();
        }
      } catch (exception e) {

        e.printstacktrace();
      }
      return null;
    }

三、sharedpreferences的使用
sharedpreference是开发中常用的一种存储方式,主要存储一些系统不变的参数如是否是第一次进入应用程序等,通过键值对的方式进行存储
可以存储的类型:booleans, floats, ints, longs,strings.

getsharedpreferences() - 存储多个参数
getpreferences() - 仅存储一个参数并且不需要指定名字(key)
写入的步骤:

sharedpreferences调用edit()得到一个editor对象
使用 putboolean() and putstring()添加值
提交事务完成存储
读取时:只需要调用sharedpreferences的getboolean() and getstring()

下面是示例代码:

public class mysharedpreference {
  private context context;
  private sharedpreferences sp ;
  private editor edit;
  public mysharedpreference(context context){
    this.context = context;
  }
  public boolean savemessage(string name,string pwd){
    boolean flag = false;
     sp = context.getsharedpreferences("userinfo",context.mode_private);
     //mode定义了访问的权限现在是本应用可以访问
    edit = sp.edit();
    edit.putstring("name", name);
    edit.putstring("pwd", pwd);
    flag = edit.commit();//提交事务将数据持久化到存储器中
    return flag;

  }
  public map<string,object> getmessage(){
    map<string,object> map = new hashmap<string, object>();
    sp = context.getsharedpreferences("userinfo", context.mode_private);
    string name = sp.getstring("name", "");
    string pwd = sp.getstring("pwd", "");
    map.put("name", name);
    map.put("pwd",pwd);
    return map;

  }

}