Android数据存储之文件存储

Android的文件存储 要理解Android的文件存储,首先要明白Android是如何用什么方式获取和存入数据的。Android的文件操作都是通过流的方式进行的,即IO。Android的文件操作跟Java是一样的,文件操作分为输入流(InputStream)和输出流(OutputStream),输入流用于获取文件数据,输出流用于存储文件。 详细介绍请参考博文:http://blog.youkuaiyun.com/stoppig/article/details/39206219 立即下载

—— 大家都知道,数据和算法是一个应用程序的核心。所以,学好数据存储是非常有必要的。
——Android数据的存储有多种方式,比如ContentProvider(内容提供者)、SQLite(嵌入式数据库)存储、SharedPreferences存储、文件(File)存储等。文件(File)存储是最简单的数据存储方式,也是用得较少的一种数据存储方式。
——在这里,不知道大家有没有发现文件(File)存储似曾相识啊!没错,所谓的文件(File)存储不过是简单的Java.IO流罢了。那么,Java.IO流来到Android平台上怎么使用呢?不妨先想想,这就有点像老大来到一个有出息的小弟家做客,如果你是这个有出息的小弟,你该怎么做?不管怎样是不是先让个人去给老大带路呀!礼貌必不可少的。回到主题,为了让Java.IO流在安卓平台上起到好的发挥作用,这里需要使用Context来给老大带路!Context中都提供了相应的函数来支持,使用Context不但操作简单方便,最重要的是Context会帮助我们管理这些文件,也可以方便帮助我们控制文件的访问权限。
——了解Context的得力之处:(1)FileOutputStream out = context.openFileOutput(String filename,int mode); 以mode模式获得文件输出流,(2)out.write(byte[]b)。openFileOutput方法中有两个参数,filename是文件名(不包含路径),mode是代表模式,其中,mode模式有四种,MODE_PRIVATE:私有覆盖模式 (默认模式),MODE_APPEND:私有追加模式,注意:这两种模式只能被当前应用访问;还有两种模式在Android4.2以后被废除。默认情况下会将文件存储到/data/data//files的文件。
——很多文件存储的例子写的都不一样,你会发现一个大神写的是一样,另一个大神写的是一样,这里有必要归纳一下,一种是简单的版本(直接是上面说到的两个步骤),还有一种是复杂的版本(就是需要用到转换流和缓冲区等),根据需要来选择就好,最起码别人写的要看懂哈!知道是怎么一回事就行。下面贴出代码:
简单版:

/**
 * Created by Dell on 2017/3/22.
 */
public class MyContextFile extends Activity {
    private EditText writeFileContent;
    private TextView displayContent;
    private Button writeFileButton,readFileButton;
    private String writeinfo;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_file);
        initLayout();
    }
    private void initLayout(){
        writeFileContent=(EditText) findViewById(R.id.write_Edit);
        displayContent=(TextView) findViewById(R.id.display_textView);
        writeFileButton=(Button) findViewById(R.id.write_Button);
        readFileButton=(Button) findViewById(R.id.read_Button);
        writeFileButton.setOnClickListener(writeFileClickListener);
        readFileButton.setOnClickListener(readFileClickListener);
    }
    //将输入的信息写入到文件中
    View.OnClickListener writeFileClickListener=new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //通过EditText获得输入的信息
            writeinfo=writeFileContent.getText().toString();
            FileOutputStream fileOutputStream=null;
            try {
                //通过openFileOutput()方法得的一个文件输出流
                fileOutputStream=openFileOutput("user.txt",MODE_PRIVATE);
                //将输入的信息写入到文件
                fileOutputStream.write(writeinfo.getBytes());
                Toast.makeText(MyContextFile.this, "写入文件成功",
                        Toast.LENGTH_SHORT).show();
            }catch (FileNotFoundException e){
                e.printStackTrace();
            }catch (IOException e){
                e.printStackTrace();
            }finally {
                if (fileOutputStream!=null){
                    try {
                        fileOutputStream.close();//关闭文件流
                    }catch (IOException e){
                        e.printStackTrace();
                    }
                    fileOutputStream=null;
                }
            }
        }
    };
    //读取文件中的信息
    View.OnClickListener readFileClickListener=new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            FileInputStream fileInputStream=null;
            try {
                //通过openFileOutput()方法得的一个文件写入流
                fileInputStream=openFileInput("user.txt");
                //定义一个字节数组来缓存读取的字节
                byte[] cache=new byte[fileInputStream.available()];
                //读取文件
                fileInputStream.read(cache);
                displayContent.setText(":"+new String(cache));
            }catch (FileNotFoundException e){
                e.printStackTrace();
            }catch (IOException e){
                e.printStackTrace();
            }finally {
                if (fileInputStream!=null){
                    try {
                        fileInputStream.close();//关闭文件流
                    }catch (IOException e){
                        e.printStackTrace();
                    }
                    fileInputStream=null;
                }
            }
        }
    };
}

复杂版:

package com.xhm.demo.myandroidsql;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

/**
 * Created by Dell on 2017/3/22.
 */
public class FileContext extends Activity {
    String data="data";
    FileOutputStream out=null;
    BufferedWriter bw=null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try {
            //调用Context.openFileOutput()方法获得java文件
            // 输出流(FileOutputStream)并返回对象
            out=openFileOutput("data", Context.MODE_PRIVATE);
            //借助FileOutputStream构建出一个OutputStreamWriter对象
            OutputStreamWriter osw=new OutputStreamWriter(out);
            //借助OutputStreamWriter构建出一个BufferedWriter对象
            bw=new BufferedWriter(osw);
            bw.write(data);//写内容  
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            try {
                if (bw!=null){
                    bw.close();//关闭文件流
                }
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }
}

——是不是觉得安卓文件存储很简单呀!是它和Java.IO流有关系而简单,也是因为它和Java.IO流有关系而复杂。上面的例子都是在安卓存储理想状态下执行的,请问你了解安卓的数据存储情况吗?有那些分类,各有什么不同、采取什么方式等等?
——学习就像考虑事情一样要周。接下来了解一下安卓的存储情况吧!Android存储空间分为内部存储空间(Internal Storage)和外部存储空间(External Storage)。简单的说就是手机内存和SD卡这两种存储空间。内部存储空间十分有限,因而显得可贵,所以我们要尽可能避免使用;另外,它也是系统本身和系统应用程序主要的数据存储所在地,一旦内部存储空间耗尽,手机 也就无法使用了。 使用内部存储主要有二个方式,一个是文件操作,一个是文件夹操作。注意:尤其是在开发应用程序是要为手机用户解应用数据到底存在哪里好?想想如果把手机用户的内存存了很多数据,内存用完用户会反感的,那如果我们把数据存到SD卡安全数不高也会引来用户的反感。那怎么办呢?这是值得考虑的,实在不行我们采取中庸之道,在存储数据之前我们先来判断用户手机内存和SD卡还剩多少内存,把数据存到内存最多的那个地方去,不痛不痒,妙。
1.需要判断sd卡是否可用:

/**
 * Check if the primary "external" storage device is available.
 * 
 * @return
 */
public static boolean hasSDCardMounted() {
    String state = Environment.getExternalStorageState();
    if (state != null && state.equals(Environment.MEDIA_MOUNTED)) {
        return true;
    } else {
        return false;
    }
}

2.应用数据存放路径,同其他应用应该保持一致,应用卸载时,清除数据:
3.需要判断两者的可用空间:在API level 9及其以上时,File对象的getFreeSpace()方法获取系统root用户可用空间;
getUsableSpace()取非root用户可用空间。当有多个存储可用时获取磁盘用量,根据当前系统情况选用合适的存储。
根据系统存储用量,合理设定app所用的空间大小;运行时,也可做动态调整。

@TargetApi(VERSION_CODES.GINGERBREAD)
public static long getUsableSpace(File path) {
    if (path == null) {
        return -1;
    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
        return path.getUsableSpace();
    } else {
        if (!path.exists()) {
            return 0;
        } else {
            final StatFs stats = new StatFs(path.getPath());
            return (long) stats.getBlockSize() * (long) stats.getAvailableBlocks();
        }
    }
}

——内部存储的唯一缺点就是空间有限、珍贵;最大的有点就是安全数高(只允许本应用程序访问,且一旦删除应用程序,数据一会跟着被删除)。外部存储空间是指手机出厂的时候不存在,用户在使用时候可以自由添加的外部存储介质比如TS卡,SD卡等闪存储介质。其实安卓系统它是要依赖于外部存储卡的,因为对于Android系统,如果没有外部存储卡,很多 的系统应用无法使用,比如多媒体相关的应用程序无法使用。优点就是存储空间大,不用担心去清除数据。外部存储的缺点就是不是很稳定,对于Android手机来讲可以说,很不稳定,本身闪存介质就容易出问 题,SD卡处于不能正常使用的状态十分多。

如何利用 多 张 GPU 高效运行 Ollama 通过以上步骤,我们可以确保系统尽可能地利用所有 多张GPU 来运行 Ollama。如果在配置过程中遇到问题,建议查阅 Ollama 的官方文档,确认其是否支持多 GPU 并行计算,或者对系统性能进行进一步的优化。充分利用多 GPU 的并行计算能力,可以显著提升 Ollama 的运行效率,加快模型的推理和训练速度。希望本文能帮助你顺利实现 多张 GPU 的高效利用。 阅读详情

相关推荐

【Labview学习】——如何实现软件的中/英文切换

各位亲爱的小伙伴们大家好,这里是小万的labview专题,今天为大家带来的是软件的中/英文切换,在全球化的浪潮之下,各行各业发生着巨大的变化,emmm………… 以下是简单的演示图片,注意观察菜单栏和软件界面各控件的语言状态: 本次分享将分为两部分:菜单中英文切换&界面控件中英文切换 ** 菜单中英文切换 ** 1. 中/英文菜单制造 要想实现菜单的中/英文语言切换,就得做两个菜单,一个...

weixin_44827166的博客 1万+

Android - 文件存储

手动在/storage/sdcard下创建自定义文件夹,APP删除后不会删除存储在这里的数据。由于Android10中加入了作用域存储功能,

HugMua的博客 17万+

Petalinux实战:3种方法调试AXI UART Lite设备(含minicom/screen/直接寄存器操作对比)

本文详细介绍了在Zynq平台上使用Petalinux调试AXI UART Lite设备的三种实用方法:用户空间工具(minicom/screen)、应用层程序(termios配置)和底层寄存器直接操作。文章对比了各方法的优缺点与适用场景,并重点解析了设备树配置、驱动加载等关键环节,帮助开发者快速定位并解决串口通信中的常见问题。

weixin_29190169的博客 432

安卓存储数据

安卓存储数据

A125679880的博客 2598

Silvaco TCAD仿真例库——肖特基二极管反向击穿特性(案例)

本文详细解析了使用Silvaco TCAD仿真例库进行肖特基二极管反向击穿特性分析的完整案例。通过构建包含浮空P型保护环的平面结构,重点阐述了针对雪崩击穿仿真的关键步骤,包括高精度网格划分、碰撞电离模型(impact selb)的启用以及反向电压的精细扫描策略。文章深入探讨了漂移区掺杂浓度、保护环设计等参数对击穿电压的影响,并提供了实用的调试心得,旨在帮助工程师精准预测和优化功率肖特基二极管的反向耐压能力。

fire9的博客 724

ABAP Module Pool 编程入门:把 Table Control 用透,在 Dynpro 里做出可编辑的列表界面

摘要:Table Control是SAP GUI中用于对话式事务的多行数据交互控件,具备滚动、选择、修改等功能。它通过CXTAB_CONTROL/CXTAB_COLUMN结构实现动态控制,需在PBO/PAI中配合LOOP循环处理数据流。开发时需注意LINES、TOP_LINE等关键字段设置,并采用并行循环简化编码。典型应用包括订单行维护、主数据管理等场景,支持多选删除、列排序等业务需求。(150字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 340

一篇文章彻底明白Android文件存储

Android中经常需要使用文件存储用户数据本文将梳理各个版本中的文件存储,希望能帮上忙。早期的Android设备存储空间较小,有一个内置(build-in)的存储空间,即内部存储,另外还有一个可以移除的存储介质,即外部存储(如SD卡)。但是随着设备内置存储空间增大,很多设备已经足以将内置存储空间一分为二,一块为内部存储,一块为外部存储。所有应用均可读写,原则上不应保存敏感信息检查是否挂载外部存储并不总是可用的,因为外部存储可以移除(早期设备)或者作为USB存储设备连接到PC,访问前。

木牛的博客 605

Python 爬虫教程:财经新闻实时抓取(最新资讯 + 关键词提取)

在当今信息爆炸的时代,财经新闻的实时获取对于投资者、研究人员以及普通大众来说都具有重要的价值。通过 Python 爬虫技术,我们可以高效地抓取财经新闻,并提取其中的关键信息,以便更好地进行数据分析和决策支持。本文将详细介绍如何使用 Python 编写一个财经新闻实时抓取系统,并结合关键词提取技术,帮助读者快速掌握 Python 爬虫的核心技能。

yansideyucsdn的博客 1049

Android数据存储几种方式整理笔记

实际开发Android应用程序时,数据的存储与操作是必不可少的。在这里我主要介绍Android中实现数据存储的5种方式,分别是:1、SharedPreferences存储数据2、文件存储数据3、SQLite数据库存储数据4、ContentProvider存储数据5、网络存储数据。

m0_57781768的博客 1万+

uniapp:使用uni.request请求报错errMsg“:“request:fail abort statusCode:-1(uniApp使用uni.request向服务端接口发起请求失败报错)

解决request请求报错request:fail abort statusCode:-1,Uniapp打包到app后报错request:fail abort statusCode:-1,uniapp使用uni.request请求报错{“errMsg“:“request:fail abort statusCode:-1“}的解决办法,不是SSL证书问题,跳过ssl验证,解决https问题,Uniapp报错,小程序报错(含https解决方案)(真机预览问题)uni-app打包后不发请求的原因,uni-app真

✅ 精选推荐文章 3580

海康VisionMaster与西门子Smart 200进行S7通信

海康VisionMaster与西门子Smart 200进行S7通信

haier123888的博客 8177

Android 数据存储(一)-文件存储

Android系统提供了提供了多种保存应用数据的选项:文件存储(应用程序专属文件存储、共享文件存储)、Preferences、数据库。

帅次的博客 6372

21、深入了解SELinux安全系统与/proc文件系统

本文深入探讨了SELinux安全系统与/proc文件系统的原理及实际应用。详细介绍了SELinux的安全上下文、域转换、运行模式、角色管理以及策略查看工具seinfo的使用;同时解析了/proc文件系统的结构与功能,涵盖进程信息查看、系统资源监控及性能优化方法。结合SELinux与/proc的协同应用,提供了系统问题排查流程与安全管理最佳实践,帮助用户提升Linux系统的安全性与稳定性。

ik678901234的博客 61

Android安卓——数据存储之文件存储

在安卓中对数据的存储有了SQLite数据库存储数据,在本次学习的是对文件的存储。利用SharedPerences将数据存储在文件中。 实战:本次学习准备的实战是总结性写了一下数据内部存储的读写、文件内部存储的读写、在SD卡中的读写。 一、 简单存储SharedPreferences1、简单存储简介 SharedPreferences是一种轻量级的数据保存方式。 通过SharedPrefer

Deniece_X的博客 1455

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Android数据存储_安卓开发 本地多媒体文件存储

SharedPreference是Android提供的用来存储一些简单配置信息的一种机制,核心原理是:保存基于XML文件存储的key-value键值对数据。其采用了Map数据结构来存储数据,以键值对的方式存储,可以简单的读取与写入。除了内部存储空间可以存储内容外,在移动设备商,均带有外部存储介质,即外部存储(如SD卡)。总结,以上这些Context提供的关于目录和文件的操作,均是在data/dat/包名及其目录下进行操作的。在外部存储介质中,除了私有目录外,还有一些公共的目录。公共目录的存储路径是。

2501_90265210的博客 920

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

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

Android数据存储技术之文件存储

Android系统主要提供了3种方式用于简单的数据存储:1.文件存储 2.SharedPreference存储 3.数据库存储。其中文件存储是Android最基本的一种数据存储方式,他比较适用于存储一下简单的文本数据或者二进制数据,下面说明一下文件存储的核心内容。 1.将数据存储到文件中 Context类提供了一个openFileOutput()方法,可以用于将数据...

yuncaidaishu的博客 303

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Android数据存储_文件存储

Android数据存储的方式有种,主要有三种...

qq_35698774的博客 991

安卓数据存储之SharedPreferences储存与文件存储

Android 数据存储方案 SharedPreferences 存储 SharedPreferences采用键值对存储 存储再share_prefs文件夹中 写数据步骤 第一步. 先获取SharedPreferences对象 有三个方法. 1.Context类中的getSharedPreferences()方法 getSharedPreferences两个参数 第一个参数式文件名字,第二个参数式...

qq_43694952的博客 590

【Android -- 数据存储】使用文件存储数据

本篇博文主要介绍第一种方式,通过文件存储数据。

Kevin Learn Android 1448

android中的存储,Android中数据存储——文件存储数据

当一个应用程序在Android中安装后,我们在使用应用的过程中会产生很多的数据,应用都有自己的数据,那么我们应该如何存储数据呢?数据存储方式Android 的数据存储有5种方式:1. SharedPreferences存储数据SharedPreferences数据存储,也叫作xml存储。这是将数据存储“data/data/程序包名/share_prefs”路径下的到xml文件中。相关连接:《And...

weixin_34532234的博客 548

【Android】本地数据存储之文件存储和SharedPreferences

数据存储方式 Android平台提供了五种数据存储的方式: 文件存储:Android提供了openFileInput()和openFileOutput()方法来读取设备上的文件,读取方式和Java中的I/O程序是一样的。 SharedPreferences:可以用来存储简单的配置信息,是用的XML格式将数据存储到设备中。 SQLite数据库:这个是Android自带的一个轻量级数据库。 ContentProvider:Android四大组件之一,主要应用于应用程序之间的数据交换。

qq_45933810的博客 1935

android文件存储教程,Android基础教程数据存储之文件存储

Android基础教程数据存储之文件存储将数据存储到文件中并读取数据1、新建FilePersistenceTest项目,并修改activity_main.xml中的代码,如下:(只加入了EditText,用于输入文本内容,不管输入什么按下back键就丢失,我们要做的是数据被回收之前,将它存储在文件中)android:id="@+id/activity_main"android:layout_wid...

weixin_39731782的博客 178

Android数据存储--文件存储

android平台的数据存储主要有5种方式: 1.文件存储数据; 2.使用SharedPreferences存储数据; 3.SQLite数据库存储数据; 4.使用ContentProvider存储数据; 5.网络存储数据; 这里介绍文件存储: 文件存储方式是一种较常用的方法,在Android中读取/写入文件的方法,与Java中实现I/O的程序是完全一样...

weixin_30640769的博客 147

Android中的数据存储之文件存储、SharedPreferences和Pull解析

Android中的数据存储之文件存储、SharedPreferences和Pull解析一、数据存储的五种方式 文件存储 分手机内部存储、手机外部存储 以IO流形式存放,可存放较大数据 SharedPreferences 本质是一个XML 以Map形式存放简单的配置参数 SQLite 轻量级、跨平台数据库 所有数据都是存放在手机上的单一文件内,占用内存小 ContentProvider 将本应

技术路漫漫 1262

android的java文件存储在哪_Android开发--数据存储之File文件存储

转载来自:http://blog.youkuaiyun.com/ahuier/article/details/10364757,并进行扩充引言:Android开发中的数据存储方式Android提供了5种方式存储数据:1.文件存储数据 [也就是通常说的SD卡中]2. 使用SharedPreferences存储数据 (共享参数)3. SQLite数据库存储数据4. 使用ContentProvider存储数据 ...

weixin_42300525的博客 1371

Android中的数据存储一(文件存储、SharedPreferences存储)

一.文件存储 文件存储不对存储的内容进行处理,适合用于存储一些简单的文本数据或二进制数据。如果要存储较为复杂的文本数据,就要定义一套自己的格式规范。 1.将数据存储到文件中 Context类中有一个 openFileOutput(String name, int mode) 的方法,是用于将数据存储到指定的文件中,它的返回值为 FileOutputStream,其中有两个参数,前者表示文件名...

my优快云1997的博客 390
上一篇: Java File类和IO流
下一篇: Android数据存储之SharedPreferences存储
小红妹
博客等级 码龄10年 151粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值