Android数据访问存储之内存读写

易语言手游so内存读写模块,支持基地址内部读写教程(全网首套) 易语言手游so内存读写模块,支持基地址内部读写教程 阅读详情

原文出处:http://blog.youkuaiyun.com/yihuiworld/article/details/46429577

Android数据存储之内存读写的两大内存

1、手机内存数据读写

     getFileDir( ) :   得到当前app在手机内存存储数据的位置 /data/data/当前app包名/files

     getCacheDir( ) : 得到当前app在手机内存存储数据的位置/data/data/当前app包名/cache

     openFileInput(String name) : 直接得到/data/data/当前app包名/files/name文件的输入流

     openFileOutput(String name,int mode) : 直接得到/data/data/当前app包名/files/name文件的输出流,mode为写入文件时的权限

2、sdcard数据读写

     Environment.getExternalStorageDirectory( ) :   得到当前app所在手机的sdcard位置/storage/sdcard    

      Environment.getExternalStoragePublicDirectory(String type) :   得到当前app所在手机的sdcard位置下的公共子文件夹/storage/sdcard/....    

 

Android数据存储之内存读写应用实例

布局文件 activity_main.xml

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="vertical"  
  6.     android:paddingBottom="@dimen/activity_vertical_margin"  
  7.     android:paddingLeft="@dimen/activity_horizontal_margin"  
  8.     android:paddingRight="@dimen/activity_horizontal_margin"  
  9.     android:paddingTop="@dimen/activity_vertical_margin"  
  10.     tools:context=".MainActivity" >  
  11.   
  12.     <TextView  
  13.         android:id="@+id/tv_main_memerysize"  
  14.         android:layout_width="match_parent"  
  15.         android:layout_height="80dip"  
  16.         android:textSize="20sp"  
  17.         android:textColor="#6666ff"  
  18.         android:text="内存大小"/>  
  19.       
  20.     <TextView  
  21.         android:id="@+id/tv_main_sdcard"  
  22.         android:layout_width="match_parent"  
  23.         android:layout_height="40dip"  
  24.         android:textSize="20sp"  
  25.         android:textColor="#ff6666"  
  26.         android:text="SDCard存在否"/>  
  27.     <TextView  
  28.         android:id="@+id/tv_main_sdcardsize"  
  29.         android:layout_width="match_parent"  
  30.         android:layout_height="80dip"  
  31.         android:textSize="20sp"  
  32.         android:textColor="#ff6666"  
  33.         android:text="SDCard内存大小"/>  
  34.       
  35.     <EditText   
  36.         android:id="@+id/et_main_content"  
  37.         android:layout_width="match_parent"  
  38.         android:layout_height="0dip"  
  39.         android:layout_weight="1"  
  40.         android:textSize="20sp"  
  41.         android:text="测试写入内存:\n将这里的文本信息保存到内存文件 testmemeryio.txt"/>  
  42.       
  43.     <Button   
  44.         android:id="@+id/btn_main_writememery"  
  45.         android:layout_width="match_parent"  
  46.         android:layout_height="wrap_content"  
  47.         android:text="写入内存"/>  
  48.     <Button   
  49.         android:id="@+id/btn_main_writesdcard"  
  50.         android:layout_width="match_parent"  
  51.         android:layout_height="wrap_content"  
  52.         android:text="写入sdcard"/>  
  53.   
  54. </LinearLayout>  

示例代码 MainActivity.Java

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.yihui.iomemery;  
  2.   
  3. import java.io.FileOutputStream;  
  4. import java.io.IOException;  
  5.   
  6. import android.annotation.SuppressLint;  
  7. import android.app.Activity;  
  8. import android.content.Context;  
  9. import android.os.Bundle;  
  10. import android.os.Environment;  
  11. import android.os.StatFs;  
  12. import android.text.format.Formatter;  
  13. import android.view.View;  
  14. import android.view.View.OnClickListener;  
  15. import android.widget.Button;  
  16. import android.widget.EditText;  
  17. import android.widget.TextView;  
  18. import android.widget.Toast;  
  19.   
  20. public class MainActivity extends Activity implements OnClickListener {  
  21.   
  22.     private TextView tv_main_memerysize;  
  23.     private TextView tv_main_sdcard;  
  24.     private TextView tv_main_sdcardsize;  
  25.       
  26.     private EditText et_main_content;  
  27.       
  28.     private Button btn_main_writememery;  
  29.     private Button btn_main_writesdcard;  
  30.       
  31.     private boolean sdcardMount = false;  
  32.       
  33.     @Override  
  34.     protected void onCreate(Bundle savedInstanceState) {  
  35.         super.onCreate(savedInstanceState);  
  36.         setContentView(R.layout.activity_main);  
  37.           
  38.         tv_main_memerysize = (TextView) findViewById(R.id.tv_main_memerysize);  
  39.         tv_main_sdcard = (TextView) findViewById(R.id.tv_main_sdcard);  
  40.         tv_main_sdcardsize = (TextView) findViewById(R.id.tv_main_sdcardsize);  
  41.         et_main_content = (EditText) findViewById(R.id.et_main_content);  
  42.         btn_main_writememery = (Button) findViewById(R.id.btn_main_writememery);  
  43.         btn_main_writesdcard = (Button) findViewById(R.id.btn_main_writesdcard);  
  44.           
  45.         btn_main_writememery.setOnClickListener(this);  
  46.         btn_main_writesdcard.setOnClickListener(this);  
  47.           
  48.         //判断sdcard是否已安装  
  49.         tv_main_sdcard.setText("sdcard未安装");  
  50.         if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){  
  51.             sdcardMount = true;  
  52.             tv_main_sdcard.setText("sdcard已安装");  
  53.         }  
  54.           
  55.         //得到sdcard和内存的大小及可用容量  
  56.         if(sdcardMount){  
  57.             tv_main_sdcardsize.setText("sdcard" + getStorgeFileSize(Environment.getExternalStorageDirectory().getPath()));  
  58.         }else {  
  59.             tv_main_sdcardsize.setText("sdcard总内存:0MB;  可用内存:0MB");  
  60.         }  
  61.         tv_main_memerysize.setText("手机" + getStorgeFileSize(Environment.getDataDirectory().getPath()));  
  62.           
  63.     }  
  64.   
  65.     /* 两个按钮的监听事件,将内容写入内存文件testmemeryio.txt  */  
  66.     @Override  
  67.     public void onClick(View v) {  
  68.         String text = et_main_content.getText().toString();  
  69.         boolean success = true;  
  70.           
  71.         switch (v.getId()) {  
  72.             case R.id.btn_main_writesdcard: //写入sdcard  
  73.                 FileOutputStream fos = null;  
  74.                 try {  
  75.                     fos = new FileOutputStream(Environment.getExternalStorageDirectory().getPath() + "/m.txt");  
  76.                     fos.write(text.getBytes("utf-8"));  
  77.                     fos.flush();  
  78.                 } catch (IOException e) {  
  79.                     success = false;  
  80.                     e.printStackTrace();  
  81.                 } finally {  
  82.                     if(fos != null){  
  83.                         try {  
  84.                             fos.close();  
  85.                             fos = null;  
  86.                         } catch (IOException e) {  
  87.                             e.printStackTrace();  
  88.                         }  
  89.                     }  
  90.                 }  
  91.                 Toast.makeText(MainActivity.this, success == true ? "写入sdcard文件成功" : "写入sdcard文件失败", 0).show();  
  92.                 break;  
  93.               
  94.             case R.id.btn_main_writememery: //写入内存  
  95.                 FileOutputStream openFileOutput = null;  
  96.                   
  97.                 try {  
  98.                     //使用openFileOutput()函数,直接在/data/data/包名/files/目录下创建文件  
  99.                     openFileOutput = openFileOutput("testmemeryio.txt", Context.MODE_PRIVATE);  //私有模式写文件  
  100.                     openFileOutput.write(text.getBytes("utf-8"));  
  101.                     openFileOutput.flush();  
  102.                 } catch (IOException e) {  
  103.                     success = false;  
  104.                     e.printStackTrace();  
  105.                 } finally {  
  106.                     if(openFileOutput != null){  
  107.                         try {  
  108.                             openFileOutput.close();  
  109.                             openFileOutput = null;  
  110.                         } catch (IOException e) {  
  111.                             e.printStackTrace();  
  112.                         }  
  113.                     }  
  114.                 }  
  115.                 Toast.makeText(MainActivity.this, success == true ? "写入内存文件成功" : "写入内存文件失败", 0).show();  
  116.                 break;  
  117.               
  118.             default:  
  119.                 break;  
  120.         }  
  121.     }  
  122.       
  123.     /* 取得内存文件空间大小及可用大小 */  
  124.     @SuppressLint("NewApi") private String getStorgeFileSize(String path){  
  125.         String fileSizeDesc = null;  
  126.           
  127.         StatFs statFs = new StatFs(path);                           //获得磁盘状态的对象  
  128.         long blockSizeLong = statFs.getBlockSizeLong();             //获得磁盘一个扇区的大小  
  129.         long blockCountLong = statFs.getBlockCountLong();           //获得磁盘空间总的扇区数  
  130.         long availableBlocksLong = statFs.getAvailableBlocksLong(); //获得磁盘空间总的可用扇区数  
  131.         fileSizeDesc = "总内存:" + Formatter.formatFileSize(MainActivity.this, blockSizeLong*blockCountLong)  
  132.                      + "; 可用内存:" + Formatter.formatFileSize(MainActivity.this, blockSizeLong*availableBlocksLong);  
  133.           
  134.         return fileSizeDesc;  
  135.     }  
  136. }  

注意:因为要读写SDCard,所以在项目里面的AndroidManifest.xml功能清单文件里面添加读写SDCard的权限

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. ......  
  2. <uses-sdk  
  3.     android:minSdkVersion="8"  
  4.     android:targetSdkVersion="19" />  
  5. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>  <!-- sdcard读权限 -->  
  6. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <!-- sdcard写权限 -->  
  7. ......  
运行效果:

 

在File Explorer下可以看到 /data/data/com.yihui.iomemery/files/testmemeryio.txt文件,且写入的内容就是UI上面文本框里面的内容

                      /storage/sdcard/m.txt文件,且写入的内容也是UI上面文本框里面的内容

 

Android数据存储之读写模式(读写权限)

Android是基于Linux操作系统的,所以Android的文件访问权限与Linux系统的文件访问权限是一致的,具体参考下图说明

1、Android数据访问权限实现方式

   Context类的public abstract FileOutputStream openFileOutput(String name, int mode)

2、其中mode就是文件访问权限模式,主要4种模式

   Context.MODE_PRIVATE:私有模式(默认模式),只能被应用本身和同一群组的人访问;写入的内容覆盖原文件内容

   Context.MODE_APPEND: 追加模式也是私有模式,只能被应用本身和同一群组的人访问;如果文件存在就追加内容,如果文件不存在就新建文件并写入内容

   Context.MODE_WORLD_READABLE: 所有人可读权限

   Context.MODE_WORLD_WRITEABLE : 所有人可写权限

    也可通过多个组合同时拥有多个读写权限,Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE表示所有人可读+可写



http://blog.youkuaiyun.com/yihuiworld
安卓内存教程技术交流(一):内存特征码读写原理分析 技术研究:本人一直做PC端,安卓我也是新手,这几天也开始看了一下安卓方面的内容。因为本人现在写这个帖子只学了安卓几天时间,有错可以跟我反馈。我将我这几天的学习经验跟大家分享下,反正就是大家探讨、提高。 内存实现功能:大家都知道安卓实现找坐标要识别数据,要制作字库找图找色,可能要很多尝试调试,还要加各种算法等一些麻烦的东西,如果用内存反而简单的,可能你在几分钟之内就能够把坐标、地图名字、... 阅读详情

相关推荐

【安卓逆向之内存读写

在 Android 逆向工程中,内存读写是一个常见的操作,通常用于分析和修改应用程序的行为。

SXXYNHHXX的博客 950

文件读写系列:getCacheDir()详解

不需要申请文件读写权限,下面是测试代码 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.i("x.

知道这个有什么用? 2064

数据存储之——SharedPreferences不要再误用了!(Android Q)

SharedPreferences(简称sp)Android平台上一个轻量级的存储辅助类,它提供了key-value键值对的接口,用来保存应用的一些常用配置,在应用中通常做一些简单数据的持久化缓存。本文将详细的分析SharedPreferences的实现方式、存储机制、如何正确使用它以及sp的性能问题等方面。 SharedPreferences实现详解 我们在Android开发中,如果想要保存一个相对较小的键值对集合,则应使用SharedPreferences API。SharedPreferences对

卜大爷的博客 6万+

Android内存数据读取与修改/内存代码注入/内存dump

在Android的逆向时,对内存数据的操作主要有三种:内存数据读取与修改,内存代码注入,内存dump。之前对这三种操作的概念比较模糊,因此找了些资料整理如下,加深自己的理解。 修改数据 修改内存数据 修改内存数据需要在十六进制窗口中进行编辑,可先将反汇编窗口与十六进制窗口同步。如下图所示,在反汇编窗口中点击鼠标右键弹出菜单,选中”Synchroni

犀牛划水 2万+

深入解析Android内部与外部存储

在Android系统中,内部存储被定义为应用程序内部的存储空间,这种空间仅限于应用程序本身访问。内部存储可以看作是应用的“私人空间”,一般用于保存私密数据。存储的数据包括应用的持久化状态信息、用户设置、本地文件等。与外部存储不同,内部存储的数据在默认情况下对外部应用不可见,增强了数据的私密性。内部存储可以进一步细分为两种类型:文件存储和数据库存储。外部存储,亦称为扩展存储,通常指的是手机或其他Android设备上通过物理连接、无线传输、云服务等方式扩展的存储空间。

weixin_36123300的博客 467

思科华三设备组网思科生成树PVST发BPDU导致全网闪断

一、故障现象 1.思科PVST BPDU报文导致全网闪断。 2.光衰低时不同品牌网络设备无法兼容导致接入交换机中断。 二、网络拓扑 图1 网络拓扑图 组网结构为H3C汇聚,接入交换机有思科,也有H3C,而且与汇聚直连的接入交换机下面串接了较多的交换机,或者hub。 三、排查思路 1.回忆一下最近做了什么事情,什么时候开始出的问题。 将网络汇聚交换机从思科换为H3C,H3C汇聚和思科接入对接出问题...

Silence_always的博客 7474

大话企业级android读书笔记(三)

android中的数据存储类型包括:内存,普通文件,Shared Preferences,XML和SQLLite等 文件操作: 包括读写 /** * 【文件操作】 */ package Iwit.IwitTest; import java.io.FileInputStream; import java.io.FileOutputStream; i...

weixin_34348111的博客 111

[Ethernet in CANoe]2--如何在CANoe中去仿真CP版本的SOME/IP通信

上篇文章()介绍了SOME/IP的两种类型的数据格式,根据作者目前的项目经验,目前在CANoe V18之前的版本,CP版本的arxml是最方便实现SOME/IP以太网仿真的。作者目前只有CANoe V17的license,所以本片文章是在CANoe 17上基于CP版本的arxml去做仿真模拟。

汽车ECU自动化测试 1764

Android开发中内存、内部存储、外部存储详解

手机是有两个内存的。2G和16G同时出现在一个手机中,2G是指运行内存,16G是指存储内存。手机的内存,分两种,一个是存储内存,相当于电脑的硬盘,一般手机参数里超过4G的都是指这个。存储内存是可以扩展的。如果手机支持插卡就可以扩展。另一个是运行内存,相当于电脑的内存条。这个是不能扩展的。基本上都在2GB以内,少量的可以达到3G或4G。我们先来考虑这样一个问题:打开手机设置,选择应用管理,选择任意一个

极客神殿 1万+

Cadence17.4 Allegro PCB制板(gerber / 光绘)文件输出的顺序及注意点

Cadence Allegro PCB制板文件输出 (gerber 光绘文件输出)

weixin_45331044的博客 1万+

海康威视 2DC 系列球机手机直连实用教程

海康威视2DC系列球机手机直连教程:首先确认设备支持直连功能并下载官方"海康互联"App;通过网线连接球机与路由器,使用SADP软件调整IP至同一网段;在App中添加设备并激活,完成调试即可远程查看监控画面。常见问题包括部分型号需远程解锁、网络连接异常等,可通过检查网络环境、联系客服等方式解决。本教程提供从准备到连接的完整指引,助您轻松实现手机监控管理。

海康威视技术支持 5405

安卓基础之内存读写(数据访问)

截图就不晒了  主要是两个button (用于保存和读取),一个textview 和一个editview  ,分别用于输入和显示 package com.example.zheng.filereadandwrite; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import andro

zsd747289639的博客 1598

论文理解【LLM-OR】——【Step-Opt】Training LLMs for Optimization Modeling via Iterative Data Synthesis and

本文提出 Step-Opt-Instruct 方法,针对用 LLM 做 OR 问题求解任务,用迭代问题生成 + 分步验证机制实习更可靠的训练数据合成,从而微调开源 LLM 得到 Step-Opt。在多个 OR 建模基准提升性能,尤其在复杂问题上提升更明显

佚失的诗篇 805

Android中数据存储(一)

国庆没有给国家添堵,没有勾搭妹子,乖乖的写着自己的博客。。。。。 本文将为大家介绍Android中数据存储的五种方式,数据存储可是非常重要的知识哦。 一,文件存储数据   ①在ROM存储数据   关于在ROM读写文件,可以使用java中IO流来读写,但是谷歌很人性化,直接给你封装了一下,所以就有了Context提供的这两个方法:FileInputStream openF

machengdu1213的博客 321

Claude Skills:不是更聪明,而是更“像专家”的 Agent 养成方法

Claude Skills 不是在告诉 Agent“你能做什么”, 而是在约束它“你应该如何思考、如何判断、如何给结论”。

测试者家园 1293

高通平台WIFI学习-- 基于6GHZ Discovery (STA Scanning)讲解

本文介绍了6GHz频段的网络扫描优化方案。主要内容包括:1)带内发现机制,将6GHz信道分为优先扫描信道(PSC)和非PSC信道,规范了STA发送探测请求的条件及等待时间;2)带外发现机制,通过RNR信息元素实现跨频段AP发现,减少6GHz频段干扰;3)具体扫描流程示例,包括DBS扫描和敏捷扫描的顺序安排。方案通过优化探测请求发送规则和跨频段信息共享,有效降低了信道污染和扫描延迟,日志数据验证了6GHz信道扫描的具体实现过程。

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 267

了解 Android API 中的 SharedPreferences

点击上方“程序员大咖”,选择“置顶公众号”关键时刻,第一时间送达!Preference翻译为偏好,但实际上它可以算是Setting(设置)的别名。两种叫法给人的差异在于针对的对象不同:设置更倾向于设备的属性,修改设置便是改变设备的功能;偏好则倾向于用户的性格,用户基于其个人的偏好来来形成设备的差异化。但是总体而言,它们是一致的,都是通过用户的需求改变设备的体验。在Android的开发过程中,会在使

<sdffdsfsdfdfs>sfsfsfsdfsdffds</sdfsDS>Fsd 372

第154章 点云大规模并行处理(GPU加速)

优化点云处理✨ 使用。

yumeiguo的博客 374

Android存储数据方式

另外,如果图片是从资源文件中加载的(如放在drawable目录下),Android系统会根据设备的DPI值和资源目录的DPI值对图片进行缩放,这也会影响图片在内存中的实际占用大小。SharedPreferences是Android提供的一种轻量级的数据存储方式,基于键值对存储数据,数据以XML文件的形式保存在设备上。它提供了简单的API来读取和写入数据,并且支持数据持久化,即使应用关闭后数据依然存在。Android系统提供了多种数据存储方式,以满足不同场景下的数据存储需求。

望佑 1304

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

android数据存储与访问的方式包括,Android数据存储与访问

Android数据存储与访问Android数据存储与访问方式中的一个——文件存储与读写,当然除了这种方式外,我们可以存到SharedPreference,数据库, 或者Application中。取自RUNOOB.COM取自RUNOOB.COM文件读写的实现:Android中的文件读写和Java中的文件I/O相同。定义一个文件的保存方法和文件的读取方法。SharedPreferences保存用户偏好...

weixin_42593130的博客 404

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【Android本地存储终极方案】:Kotlin + SQLite实现数据高速读写的秘密武器

掌握Android本地高效存储方案,本文提供Kotlin SQLite示例,详解数据库创建、增删改查操作,适用于离线数据管理场景。结合Room框架提升读写性能,代码简洁易维护,值得收藏。

AlgoFun的博客 552

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Android内存管理机制详解

与windows  内存区别 与Windows         在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然。这是Linux内存管理的一个优秀特性,在这方面,区别于 Windows的内存管理。主要特点是,无论物理内存有多大,Linux都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Linux系统的

非淡泊无以明志,非宁静无以致远 1856

Android数据存储方式之——文件存储

说明     博客中会慢慢添加Android系列教程,均是参考至官网的教程,能保证使用方式都不会过时,此处也建议学习Android的读者直接参考官网的文档,毕竟技术更新太快,买的书不能保证内容是最新的。当然看官方文档需要一定的英文基础,如果英文不过关也没关系,边看边学(自己拿去翻译吧),一举两得。学习的过程一定是枯燥的,望而止步的,也别指望能把一门技术学得多好。     本篇将的是将数据存储到

anxpp的博客 2413
上一篇: jdk 环境变量配置
下一篇: android performClick使用说明
ly0303521
博客等级 码龄17年 135粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值