【android开发-16】android中文件和sharedpreferences数据存储详解

1,文件读写方式的数据存储

下面是一个简单的示例,演示如何在Android中使用内部存储来保存和读取文件:

保存文件:

cpp 复制代码
try {  
    String data = "这是要保存的数据";  
    FileOutputStream fos = openFileOutput("myFile", Context.MODE_PRIVATE);  
    OutputStreamWriter osw = new OutputStreamWriter(fos);  
    BufferedWriter wr= new BufferedWriter (osw);  
    wr.write(data );
    wr.close();
} catch (Exception e) {  
    e.printStackTrace();  
}

在这个例子中,我们使用openFileOutput方法来打开一个文件输出流。我们传递两个参数给这个方法:文件名和模式。模式可以是Context.MODE_PRIVATE(默认),Context.MODE_WORLD_READABLE或Context.MODE_WORLD_WRITABLE。

读取文件:

cpp 复制代码
try {  
    FileInputStream fis = openFileInput("myFile");  
    InputStreamReader isr = new InputStreamReader(fis);  
    BufferedReader br = new BufferedReader(isr);  
    String line;  
    while ((line = br.readLine()) != null) {  
        Log.e("DATA", line);  
    }  
    fis.close();  
} catch (Exception e) {  
    e.printStackTrace();  
}

在这个例子中,我们使用openFileInput方法来打开一个文件输入流。然后,我们创建一个InputStreamReader和一个BufferedReader来读取文件的内容。最后,我们使用readLine方法来逐行读取文件的内容。

注意:文件都是默认存储到/data/data/package name/files/目录下。

注意:在Android 10(API级别29)及更高版本中,对于内部存储,Google开始限制可以访问的数据。你可能需要考虑使用其他策略,如使用外部存储或使用SQLite数据库。

2,sharedpreferences方式读写数据

在Android中,SharedPreferences是一个轻量级存储类,主要用于保存一些基本类型的数据,如String,Int,Boolean等。它提供了简单的读写接口,允许开发人员存储和获取数据。以下是如何使用SharedPreferences来读写数据的示例代码:

写入数据:

cpp 复制代码
SharedPreferences sharedPreferences = getSharedPreferences("my_preferences", MODE_PRIVATE);  
SharedPreferences.Editor editor = sharedPreferences.edit();  
  
// 存储一个字符串  
editor.putString("key1", "value1");  
// 存储一个整数  
editor.putInt("key2", 123);  
// 存储一个布尔值  
editor.putBoolean("key3", true);  
  
// 提交编辑  
editor.commit();

读取数据

cpp 复制代码
SharedPreferences sharedPreferences = getSharedPreferences("my_preferences", MODE_PRIVATE);  
  
// 读取一个字符串  
String value1 = sharedPreferences.getString("key1", "default_value");  
// 读取一个整数  
int value2 = sharedPreferences.getInt("key2", 0);  
// 读取一个布尔值  
boolean value3 = sharedPreferences.getBoolean("key3", false);

注意:getSharedPreferences方法的第一个参数是偏好设置文件的名称,如果该名称不存在,系统将创建一个新的。第二个参数是模式,通常我们使用MODE_PRIVATE或Context.MODE_PRIVATE。如果使用MODE_WORLD_READABLE或Context.MODE_WORLD_READABLE,则从Android 4.2(API级别17)开始已经被废弃。

注意:sharedpreferences是使用键值对 的方式存储数据。

默认的存储路径/data/data/package name/shared_pref/目录下。

使用xml的格式来管理数据:

完整的参考用例代码:

以下是在Android中使用SharedPreferences的完整参考代码用例。这个例子展示了如何使用SharedPreferences来存储和读取用户的偏好设置。

写入数据:

cpp 复制代码
import android.content.SharedPreferences;  
import android.content.SharedPreferences.Editor;  
import android.content.Context;  
import android.preference.PreferenceManager;  
  
public class MyActivity extends Activity {  
      
    private SharedPreferences sharedPreferences;  
    private Editor editor;  
      
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
          
        // 获取SharedPreferences对象,使用该应用程序的上下文(this)初始化它。  
        sharedPreferences = getSharedPreferences("my_preferences", MODE_PRIVATE);  
        editor = sharedPreferences.edit();  
          
        // 存储一个字符串  
        editor.putString("key1", "value1");  
        // 存储一个整数  
        editor.putInt("key2", 123);  
        // 存储一个布尔值  
        editor.putBoolean("key3", true);  
          
        // 提交编辑,将数据保存到SharedPreferences中。  
        editor.commit();  
    }  
}

读取数据:

cpp 复制代码
import android.content.SharedPreferences;  
import android.content.SharedPreferences.Editor;  
import android.preference.PreferenceManager;  
import android.widget.TextView;  
      
public class MyActivity extends Activity {  
      
    private SharedPreferences sharedPreferences;  
    private TextView textView;  
      
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        textView = findViewById(R.id.textView);  
          
        // 获取SharedPreferences对象,使用该应用程序的上下文(this)初始化它。  
        sharedPreferences = getSharedPreferences("my_preferences", MODE_PRIVATE);  
          
        // 读取一个字符串,如果找不到键,则返回默认值"default_value"  
        String value1 = sharedPreferences.getString("key1", "default_value");  
        textView.setText("Value of key1: " + value1);  
          
        // 读取一个整数,如果找不到键,则返回默认值0  
        int value2 = sharedPreferences.getInt("key2", 0);  
        textView.append("\nValue of key2: " + value2);  
          
        // 读取一个布尔值,如果找不到键,则返回默认值false  
        boolean value3 = sharedPreferences.getBoolean("key3", false);  
        textView.append("\nValue of key3: " + value3);  
    }  
}
相关推荐
故渊at37 分钟前
第十三板块:Android 综合架构与未来演进 | 第三十一篇:Android 架构演进与 Fuchsia OS 的挑战
android·架构·宏内核·微内核·fuchsia·ipc 性能博弈
aqi0038 分钟前
一文速览 HarmonyOS 6.1.1 推出的十个新特性
android·华为·harmonyos·鸿蒙·harmony
matrixmind11 小时前
aiomysql:异步场景下的 MySQL 驱动
android·数据库·mysql·其他
随遇丿而安1 小时前
第8周:弹窗 / 提示组件全功能与弹窗优化
android
zh_xuan1 小时前
诡异Bug:输入框删除字符,却越删越多
android·bug
nwsuaf_huasir1 小时前
matlab绘制尺寸和字体合适的图片插入到latex的方法
android·开发语言·matlab
future_li1 小时前
Speed Tools:一套低侵入的 Android 插件化 + 动态换肤 + 字体切换框架
android
杊页1 小时前
第一板块:Android 系统基石与运行原理 | 第二篇:Android 编译、打包与安装机制
android·操作系统
故渊at1 小时前
第十二板块:Android 系统启动与初始化 | 第三十篇:Zygote 孵化机制与 System Server 的启动
android·wms·pms·ams·zygote·ipc
故渊at2 小时前
第十二板块:Android 系统启动与初始化 | 第二十九篇:Init 进程、RC 脚本与属性服务(Property Service)
android·linux·内存映射·权限控制·init进程·rc脚本·属性服务