Android数据存储和读取的三种方法

Android数据存储和读取的三种方法

一、文件存储

1、利用文件进行数据的存储

public static boolean saveAsFilepath(String username, String password){
	// 直接给出要写入文件的路径	
    File file = new File("data/data/cn.edu.jssvc.logonscreen/info.txt");
    try {
        FileOutputStream fos = new FileOutputStream(file);
        fos.write(username.getBytes());
        fos.write(("\n"+password).getBytes());
        fos.close();
        return true;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return false;
 }

2、利用文件进行数据的读取

public static  String[] loadInfoAsFilepath(){	
    String []temp=new String[2];
    // 直接给出要读取文件的路径	
    File file = new File("data/data/cn.edu.jssvc.logonscreen/info.txt");
    try {
        FileInputStream fis = new FileInputStream(file);
        BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
        temp[0] = reader.readLine();
        temp[1] = reader.readLine();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return temp;
}

二、Context存储

1、利用Context进行数据的存储

public static boolean saveAsContext(Context context, String username, String password){
        FileOutputStream fos = null;
        try {
            fos = context.openFileOutput("info2.txt", context.MODE_PRIVATE);
            fos.write(username.getBytes());
            fos.write(("\n"+password).getBytes());
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
}

这种方法会将数据保存到data/data/包名/files目录下

2、利用Context进行数据的读取

public static String[] loadInfoAsContext(Context context){
        // 计算要读取文件的总行数
        int fileLength = 0;
        try {
        	// 自动读取data/data/包名/files目录,只需给出文件名即可
            FileInputStream fis = context.openFileInput("info2.txt");
            BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
            while(reader.readLine()!=null) {
                fileLength++;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 读取文件数据
        String []temp = new String[fileLength];
        try {
            FileInputStream fis = context.openFileInput("info2.txt");
            BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
            temp[0] = reader.readLine();
            temp[1] = reader.readLine();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return temp;
    }

三、SharedPreferences存储

首先通过Context的getSharedPreferences()方法获取SharedPreferences对象

SharedPreferences sp;
// getSharedPreferences(para1:文件名;para2:模式),是Context的方法
// 读和写都使用sp进行操作,所以处理的文件都是info3
sp = getSharedPreferences("info3", MODE_PRIVATE);

1、利用SharedPreferences进行数据的存储

SharedPreferences.Editor editor = sp.edit();
// putString(para1:键;para2:值),是xml保存数据的格式
editor.putString("USERNAME", username);
editor.putString("PASSWORD", password);
editor.putBoolean("ISCHECKED", checked);
// 只有调用commit方法后,putXXX才会生效
editor.commit();
Log.d("MainActivity", "保存成功");

2、利用SharedPreferences进行数据的读取
这种方法会自动读取data/data/包名/shared_prefs目录,只需给出文件名即可
这种方法可以将指定Key对应的value读取出来

// getString:获取xml文件中的数据,这里给出key,获取对应的value(para1:键;para2:如果找不到对应的value,则将defvalue作为value)
Log.d("MainActivity", sp.getString("USERNAME","defusername");
Log.d("MainActivity", sp.getString("PASSWORD","defpassword");

最后,虽然有三种数据存储和读取的方法,但平时进行Android开发时,建议使用第二种或第三种方法

Android Studio 中的数据存储通常分为以下几个部分:文件存储、SQLite数据库、ContentProviders以及各种内置的数据持久化API。这些工具帮助开发者在Android应用中管理数据。 1. **文件存储(File Storage)**: - 使用`File`或`java.io`包可以直接操作设备的内部存储(Internal Storage)和外部存储(External Storage, 如SD卡)。 - `getExternalFilesDir()` 和 `getCacheDir()` 方法获取专用的文件路径用于存储应用缓存和数据。 2. **SQLite数据库**: - SQLite是一个轻量级的关系型数据库,使用它可以将数据持久化到应用内部,通过`SQLiteOpenHelper`和`Cursor` API进行CRUD(创建、读取、更新、删除)操作。 3. **ContentProviders**: - 为应用间共享数据提供机制,通过ContentResolver API可以查询、修改、删除其他应用的数据。 4. **SharedPreferences**: - 一种简单的键值对存储,适合存储少量、不常改动的数据,如应用设置。 5. **Room Persistence Library**(安卓X架构组件): - 一个ORM(对象关系映射)框架,提供了SQLite数据库的高级抽象,简化了数据存储和事务处理。 6. **Firebase Realtime Database/Cloud Firestore**: - Google提供的云数据库服务,支持实时同步和离线访问。 7. **Kotlin Coroutines/ViewModel**: - 在数据流库(LiveData、Flow)的帮助下,简化了数据获取和更新操作的异步管理。 相关问题: 1. Android Studio中如何选择合适的存储方式? 2. 如何在Android Studio中使用SQLite数据库创建和管理表? 3. ContentProviders的主要应用场景是什么? 4. SharedPreferences和SQLite在数据持久化中的优缺点分别是什么?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值