当前位置: 首页 > news >正文

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

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

保存文件:

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。

读取文件:

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来读写数据的示例代码:

写入数据:

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();

读取数据

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来存储和读取用户的偏好设置。

写入数据:

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();  }  
}

读取数据:

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);  }  
}

相关文章:

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

1,文件读写方式的数据存储 下面是一个简单的示例,演示如何在Android中使用内部存储来保存和读取文件: 保存文件: try { String data "这是要保存的数据"; FileOutputStream fos openFileOutput("myFile"…...

《当代家庭教育》期刊论文投稿发表简介

《当代家庭教育》杂志是家庭的参谋和助手,社会的桥梁和纽带,人生的伴侣和知音,事业的良师益友。 国家新闻出版总署批准的正规省级教育类G4期刊,知网、维普期刊网收录。安排基础教育相关稿件,适用于评职称时的论文发表…...

【操作教程】如何将外省医保转入广州市区(医保转移接续手续办理)?

登录(可以用微信扫码采用粤省事账号登录,没有粤省事小程序账号的可以自主申请很方便)广东政务服务网https://www.gdzwfw.gov.cn/ 这里不得不吐槽官网开发者,太拉胯了,居然有undefined,多刷新几次就好了&…...

【分布式系统学习】CAP原理详解

CAP原理详解 前言CAP一张图 一、概念1.1 关键词解读1.2 关于CAP(拆分解读)1.3 CAP原理精髓 二、CAP模拟场景举例理解三、CAP原理证明为什么不能同时满足(下面举例说明)3.1 必须满足分区容错性P下的处理方式3.2 不是必须满足分区容…...

【聚类】K-modes和K-prototypes——适合离散数据的聚类方法

应用场景: 假设一批数据,每一个样本中,有唯一标识(id)、品类(cate_id)、受众(users, 小孩、老人、中年等)等属性,希望从其中找出一些样本,使得这…...

Python-炸弹人【附完整源码】

炸弹人 炸弹人是童年的一款经典电子游戏,玩家控制一个类似"炸弹人"的角色,这个角色可以放置炸弹,并在指定的时间内引爆它们消灭敌人以达到目标,此游戏共设有两节关卡,代码如下: 运行效果&#x…...

[英语学习][5][Word Power Made Easy]的精读与翻译优化

[序言] 今日完成第18页的阅读, 发现大量的翻译错误以及不准确. 需要分两篇文章进行讲解. [英文学习的目标] 提升自身的英语水平, 对日后编程技能的提升有很大帮助. 希望大家这次能学到东西, 同时加入我的社区讨论与交流英语相关的内容. [原著英文与翻译版对照][第18页] Wh…...

Apache Doris 详细教程(一)

1、Doris简介 1.1、doris概述 Apache Doris 由百度大数据部研发(之前叫百度 Palo,2018 年贡献到 Apache 社区后, 更名为 Doris ),在百度内部,有超过 200 个产品线在使用,部署机器超过 1000 台…...

【Vue3从入门到项目实现】RuoYi-Vue3若依框架前端学习——登录页面

若依官方的前后端分离版中,前端用的Vue2,这个有人改了Vue3的前端出来。刚好用来学习: https://gitee.com/weifengze/RuoYi-Vue3 运行前后端项目 首先运行项目 启动前端,npm install、npm run dev 启动后端,按教程配置…...

win11 关闭快速启动,解决重启后部分应用没有关闭的问题

鼠标右击win11开始菜单选择windows终端(管理员)打开输入:powercfg /h off按下回车即可...

python爬虫-某公开数据网站实例小记

注意!!!!某XX网站逆向实例仅作为学习案例,禁止其他个人以及团体做谋利用途!!! 第一步:分析页面和请求方式 此网站没有技巧的加密,仅是需要携带cookie和请求…...

还记得当初自己为什么选择计算机?

还记得当初自己为什么选择计算机? 当初你问我为什么选择计算机,我笑着回答:“因为我梦想成为神奇的码农!我想像编织魔法一样编写程序,创造出炫酷的虚拟世界!”谁知道,我刚入门的那天&#xff0…...

“数”说新语向未来 | GBASE南大通用2023媒体交流会成功举办

在当前国家信创战略加速实施,及国民经济数字化转型,叠加驱动信息化行业加速发展的大形势下,以“数说新语-GBASE南大通用开放创新再领航”为主题的2023 GBASE南大通用媒体交流日活动在GBASE天津总部举行。来自IT168、ITPUB、韩锋频道、自主可控…...

每天一点python——day88

#每天一点Python——88 #编程两大思想【面向过程与面向对象】 #如图: 面向过程的线性思维: 类似于做菜一步步的来,先怎么样怎么样,再怎么样 如果不一步步的来,例如先炒菜再点火,这样是做不好的 面向对象&a…...

xShell快捷键

Xshell 是一个强大的终端仿真器,它支持多种Linux发行版的远程连接。Xshell提供了一系列的快捷键,以提高用户的操作效率。以下是一些Xshell中常用的快捷键: 新建会话窗口: Ctrl N 或 Ctrl Shift N 在现有会话中打开新标签&…...

OkGo导入失败解决办法

jcenter()maven { url "https://jitpack.io" }再同步就可以了...

02、pytest环境准备

工具准备 下载Python——python官网下载:https://www.python.org/下载PyCharm——pycharm官网下载:https://www.jetbrains.com.cn/en-us/pycharm/参考文档——pytest官方文档:https://docs.pytest.org/en/7.4.x/一个方便好用的office库——p…...

海上液化天然气 LNG 终端 ,数字孪生监控系统

液化天然气 (Liquefied Natural Gas,简称 LNG) 在能源转型过程中被广泛认可为相对较清洁的能源选择。 相对于传统的煤炭和石油燃料,LNG 的燃烧过程产生的二氧化碳 (CO2) 排放较低。LNG 的燃烧释放的二氧化碳排放较少,因此对应对气候变化和减…...

C语言面试之旅:掌握基础,探索深度(面试实战之ARM架构二)

读别人的代码,就像撕洋葱,每读一层,哭一遍。 引言 ARM 处理器是冯诺依曼存储结构,程序空间、RAM 空间及IO 映射空间统一编址,除对对RAM 操作以外,对外围IO、程序数据的访问均要通过加载/存储指令进…...

Axios详解及运用案例

前言 Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 Node.js。它允许开发者使用异步的方式发送 HTTP 请求,同时提供了一个简单、方便的 API 来处理这些请求和响应。 主要特性 Axios 的主要特性包括: 支持 Promise API:Axios 的所有函数都返回一个 Promise 对象…...

3D打印模型优化实战:从问题诊断到高效输出的完整指南

3D打印模型优化实战:从问题诊断到高效输出的完整指南 【免费下载链接】BlenderUSDZ Simple USDZ file exporter plugin for Blender3D 项目地址: https://gitcode.com/gh_mirrors/bl/BlenderUSDZ 1. 痛点定位:3D打印模型导出的四大核心障碍 诊断…...

VRCT:打破虚拟社交语言壁垒的实时翻译解决方案

VRCT:打破虚拟社交语言壁垒的实时翻译解决方案 【免费下载链接】VRCT VRCT(VRChat Chatbox Translator & Transcription) 项目地址: https://gitcode.com/gh_mirrors/vr/VRCT 在全球化的虚拟社交平台VRChat中,语言差异常常成为跨文化交流的最…...

Xinference-v1.17.1智能家居控制系统开发

Xinference-v1.17.1智能家居控制系统开发 1. 智能家居控制新体验 想象一下,早上醒来窗帘自动拉开,阳光洒进房间,咖啡机开始工作,音响播放你喜欢的音乐。这不是科幻电影,而是用Xinference-v1.17.1构建的智能家居控制系…...

Qwen2.5-VL-7B-Instruct镜像免配置教程:开箱即用的视觉语言推理平台

Qwen2.5-VL-7B-Instruct镜像免配置教程:开箱即用的视觉语言推理平台 1. 开篇介绍 你是否遇到过这样的场景:需要快速搭建一个能同时理解图片和文字的AI系统,却被复杂的配置步骤劝退?今天我要介绍的Qwen2.5-VL-7B-Instruct镜像&am…...

泛微OA Ecology 安全补丁管理账号配置与实战

1. 泛微OA Ecology安全补丁管理账号配置详解 第一次接触泛微OA Ecology系统的安全补丁管理功能时,我完全没意识到这个看似简单的配置背后藏着这么多门道。直到有次系统被恶意攻击,才发现默认的管理账号存在安全隐患。今天就带大家彻底搞懂这个关键配置&a…...

从VGG到ResNet:为什么说‘残差块’是深度学习模型‘卷’层数的救命稻草?

从VGG到ResNet:残差连接如何重塑深度神经网络的设计哲学 2014年ImageNet竞赛上,VGGNet凭借其规整的3x3卷积堆叠结构一举夺魁,将图像识别准确率提升到新高度。正当整个计算机视觉领域沉浸在"更深就一定更好"的乐观情绪中时&#xff…...

[OS] 非阻塞键盘输入检测(kbhit)在实时交互应用中的实现与优化

1. 为什么需要非阻塞键盘输入检测? 想象一下你在玩一个简单的终端游戏,比如贪吃蛇。如果游戏在每次等待你按键时都暂停执行,直到你按下某个键才继续,那体验会有多糟糕?这就是阻塞式输入的问题——程序会卡在输入等待环…...

革新性PDF打印解决方案:PDFtoPrinter全场景应用指南

革新性PDF打印解决方案:PDFtoPrinter全场景应用指南 【免费下载链接】PDFtoPrinter .Net Wrapper over PDFtoPrinter util allows to print PDF files. 项目地址: https://gitcode.com/gh_mirrors/pd/PDFtoPrinter 价值定位:重新定义PDF打印体验…...

OpenClaw智能邮件助手:nanobot镜像自动分类与回复重要邮件

OpenClaw智能邮件助手:nanobot镜像自动分类与回复重要邮件 1. 为什么需要智能邮件助手 每天早晨打开邮箱,看到堆积如山的未读邮件总是让人头疼。重要客户的询盘可能被埋没在促销广告中,紧急的协作请求可能因为延迟回复而影响项目进度。作为…...

2026Agent元年!手把手教你从0到1搭建高能智能体,小白也能秒变大神!

逼自己练完这些,你的Agent搭建就很牛了!!2026年可谓是Agent元年,智能体(AI Agent)正以惊人的速度重塑我们的工作方式,从简单的被动响应工具,进化为能自主规划、执行、协作的"数…...