笔记——数据存储

本文介绍了Android应用程序中的数据存储方法,包括文件存储的具体实现,如使用Context.openFileOutput()方法保存数据,以及通过FileInputStream和FileOutputStream进行数据读取。此外,还详细探讨了SharedPreferences的使用方法,以及SQLite数据库的基本查询操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 将数据存储到文件中
    Context类中提供了一个openFileOutput()方法,可以用于将数据存储到指定的文件中,这个方法接收两个参数
    • 第一个参数是文件名,在文件创建的时候使用的就是这个名称,⚠️这个指定的文件名不可以包含路径,因为所有的文件都是默认存储到/data/data//file/目录下的。
    • 第二个参数是文件的操作模式,主要有两种模式可选,MODE_PRIVATE和MODE_APPEND。其中MODE_PRIVATE是默认的操作模式,表示当指定同样文件名的时候,所写入的内容将会覆盖原文件中的内容,而MODE_APPEND则表示如果该文件已存在,就往文件里面追加内容,不存在就创建新文件。其实文件的操作模式本来还有另外两种:MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE,这两种模式表示允许其他的应用程序对我们程序中的文件进行读写操作,不过由于这两种模式过于危险,很容易引起应用的安全性漏洞,在Android4.2版本中被废弃。
public void save(){
    String data="Data to save";
    FileOutputStream out=null;
    BufferedWriter writer=null;
    try{
        out=openFileOutput("data",Context.MODE_PRIVATE);
        writer=new BufferedWriter(new OutputStreamWriter(out));
        writer.write(data);
    }catch(IOException e){
        e.printStackTrace();
    }finally{
        try{
            if(writer!=null){
                writer.close();
            }
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}
public String load(){
    FileInputStream in=null;
    BufferedReader reader=null;
    StringBuilder builder=new StringBuilder("");
    try{
        in=openFileInput("data");
        reader=new BufferedReader(new InputStream(in));
        String line="";
        while((line=reader.readLine())!=null){
            builder.append(reader.readLine());
        }
    }catch(FileNotFoundException e){
        e.printStackTrace();
    }catch(IOException e){
        e.printStacktrace();
    }finally{
        if(reader!=null){
            try{
                reader.close();
            }catch(IOException){
                e.printStackTrace();
            }
        }
    }
    return builder.toString();
}
  1. 打开Android Device Monitor空白
    看了好久,发现都是空白,找了好多解决办法也不知道为什么,然后突然看到在Android Studio中有一个Device File Explorer(我的是在Android Studio的右下角),点开之后可以看到我们想要看到的文件,再次折服在Android Studio的设计里。

  2. 关于SharedPreferences

    • Context类中的getSharedPreferences()方法
      这个方法可以接收两个参数,第一个参数用于指定SharedPreferences文件的名称,如果指定的文件不存在则会创建一个,SharedPreferences文件都是存放在/data/data//shared_prefs/目录下的。第二个参数用于指定操作模式,目前只有MODE_PRIVATE这一种模式可选,它是默认的操作模式,和直接传入0的效果是相同的,表示只有当前的应用程序才可以对这个SharedPreference文件进行读写,其他的几种操作模式均已被废弃。
    • Activity类中的getPreferences()方法
      这个方法和Context中的getSharedPreferences()方法很相似,不过他只接收一个操作模式参数,因为使用这个方法时会自动将当前活动的类名作为SharedPreferences的文件名
    • PreferenceManager类中的getDefaultSharedPreferences()方法
      这是一个静态方法,接收一个Context参数,并自动使用当前应用程序的包名作为前缀来命名SharedPreferences文件。得到了SharedPreferences对象之后,就可以开始向SharedPreferences文件中存储数据了,主要可以分为3步来实现。
      1)调用SharedPreferences对象的edit()方法来获取一个SharedPreferences.Editor对象
      2)向SharedPreferences.Editor对象中添加数据,比如添加一个布尔型数据就使用putBoolean()方法。
      3)调用apply()方法将添加的数据提交,从而完成数据存储操作。
  3. 关于SQLite的查询数据
    SQLiteDatabase中还提供了一个query()方法用于对数据进行查询。这个方法的参数非常复杂,最短的一个方法重载也需要传入7个参数。
    1)table-表名:表示希望从哪张表中查询数据
    2)columns:用于指定去查询哪几列
    3&4)selection&selectionArgs:用于约束查询某一行或某几行的数据,不指定则默认查询所有行的数据
    5)group by:不指定则表示不对查询结果进行group by操作
    6)having:用于对group by
    之后的数据进行进一步的过滤,不指定则表示不进行过滤
    7)order by:用于指定查询结果的排序方式,不指定则表示使用默认的排序方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值