国庆没有给国家添堵,没有勾搭妹子,乖乖的写着自己的博客。。。。。

本文将为大家介绍Android中数据存储的五种方式,数据存储可是非常重要的知识哦。

一,文件存储数据

  ①在ROM存储数据

  关于在ROM读写文件,可以使用java中IO流来读写,但是谷歌很人性化,直接给你封装了一下,所以就有了Context提供的这两个方法:FileInputStream openFileInput(String name);

FileOutputStream openFileOutput(String name, int mode)。

  这两个方法第一个参数是文件名,第二个参数指定打开文件的模式。具体有以下四种:

   Context.MODEPRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODEAPPEND

   Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。

   MODEWORLDREADABLE:表示当前文件可以被其他应用读取;
   MODEWORLDWRITEABLE:表示当前文件可以被其他应用写入。 如果希望文件被其他应用读和写,可以传入:
openFileOutput("demo.txt", Context.MODEWORLDREADABLE +Context.MODEWORLDWRITEABLE);

  使用这两个方法默认的存储位置/data/data/包名/files/...

-------------------------------------------------------------------------

在这顺便说一下,Linux文件的访问权限:

  示例:drwxrwxrwx

  r:读    w:写      x:执行

第1位:d表示文件夹,-表示文件
第2-4位:rwx,表示这个文件的所有者用户对该文件的权限
第5-7位:rwx,表示与文件所有者用户同组的用户对该文件的权限
第8-10位:rwx,表示其他用户组的用户对该文件的权限

-------------------------------------------------------------------------

此外,context还提供了其他几个方法: 

getFilesDir()得到的file对象的路径是data/data/包名/files
  存放在这个路径下的文件,只要你不删,它就一直在
getCacheDir()得到的file对象的路径是data/data/包名/cache
  存放在这个路径下的文件,当内存不足时,有可能被删除
系统管理应用界面的清除缓存,会清除cache文件夹下的东西,清除数据,会清除整个包名目录下的东西

示例代码如下:

 public void read() {
try {
FileInputStream fis = openFileInput("demo.txt");
byte[] buff = new byte[1024];
int len = 0;
if ((len = fis.read(buff)) != -1) {
System.out.println(new String(buff, 0, len));
}
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} public void write(){
try {
FileOutputStream fos = openFileOutput("demo.txt", MODE_PRIVATE);
fos.write("你若是感觉你有实力和我玩,良辰不介意奉陪到底 ".getBytes());
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} }

  使用openfileoutput()方法保存文件,文件是存放在手机里面的,存放一些小文件还行,但要是存放视频大文件,就需要在SD卡中进行存储了。

 ②在SD卡存储文件

  1.判断SD卡是否准备就绪。

if(Environment.getExternalStorageState()//用于获取SDCard的状态
.equals(Environment.MEDIA_MOUNTED))

  2.获取SD卡真实路径

Environment.getExternalStorageDirectory()//external 外部的 directory 目录

  3.使用IO流操作SD卡上的文件

注意:读写SD卡需要设置权限。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

示例代码:

 public void write(){
//判断sd卡状态
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
//创建file对象
File file = new File(Environment.getExternalStorageDirectory(), "info.txt");
try {
FileOutputStream fos = new FileOutputStream(file);
fos.write(("你若是感觉你有实力和我玩,良辰不介意奉陪到底").getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
else{
Toast.makeText(this, "你的SD卡不可用,良辰建议你检查一下", 0).show();
} } //读取
public void read(){
File file = new File(Environment.getExternalStorageDirectory(), "info.txt");
if(file.exists()){
try {
FileInputStream fis = new FileInputStream(file);
//把字节流转换成字符流
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String text = br.readLine();
System.out.println(text);
} catch (Exception e) {
e.printStackTrace();
}
}
}

平时在往SD卡或者ROM中存储大文件的时候,常常需要判断一下空间大小。接下来再为大家介绍一下如何获得存储设备剩余容量大小。

  首先你得知道这两个知识:

  • 存储设备会被分为若干个区块,每个区块有固定的大小
  • 区块大小 * 区块数量 等于 存储设备的总大小

好了直接上代码。

 //获得SD卡总大小
private String getSDTotalSize() {
File path = Environment.getExternalStorageDirectory();
//statfs 说他头发少 StatFs 一个模拟linux的df命令的一个类,获得SD卡和手机内存的使用情况
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
//Formatter.formatFileSize()——一个区域化的文件大小格式化工具。
return Formatter.formatFileSize(MainActivity.this, blockSize * totalBlocks);
}
//获得sd卡剩余容量,即可用大小
private String getSDAvailableSize() {
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return Formatter.formatFileSize(MainActivity.this, blockSize * availableBlocks);
}
//底层就是statfs,和上面结果一样
long easy = Environment.getExternalStorageDirectory().getFreeSpace(); //获得机身内存总大小
private String getRomTotalSize() {
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
return Formatter.formatFileSize(MainActivity.this, blockSize * totalBlocks);
}
//获得机身可用内存
private String getRomAvailableSize() {
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return Formatter.formatFileSize(MainActivity.this, blockSize * availableBlocks);
}

好了,终于把第一种讲完了,手为什么这么酸。。。。。。

二,使用SharedPreferences存储数据

  首先介绍一下SharedPreferences,有一个姑娘,她有一些任性,还有一些嚣张。(⊙o⊙)…走神了。。。。

  SharedPreferences是Android平台上一个轻量级的存储类,主要保存一些常用的配置信息。它的本质是基于xml文件存储Kay-value键值对数据。

  SharedPreferences存储步骤如下:

    1.通过context获取SharedPreferences对象。

    2.利用SharedPreferences的edit方法获取Editor对象。

    3.通过Editor对象存储key-value键值对数据

    4.通过commit方法提交。

示例代码:

    //往SharedPreferences存储数据
SharedPreferences sp = getSharedPreferences("config.txt", MODE_PRIVATE);
Editor edit = sp.edit();
edit.putString("name", "叶良辰");
edit.commit(); //从SharedPreferences读取数据
String name = sp.getString("name", "");
Log.i("MainActivity", name);

使用SharedPreferences会把数据存储在/data/data/<package name>/shared_prefs

温馨提示:篇幅有点大,请移步。。。。。(还没写,写完之后会贴出来)。

Android中数据存储(一)的更多相关文章

  1. android中数据存储

    android中数据存储     Android 中存储数据的方式有五种:SQLite数据库.文件存储.内容提供者.网络.SharedPreferences(Key----value)五种存储方式. ...

  2. Android中数据存储(四)——ContentProvider存储数据

    目录(?)[+]   当一个应用程序在Android中安装后,我们在使用应用的过程中会产生很多的数据,应用都有自己的数据,那么我们应该如何存储数据呢? 数据存储方式 Android 的数据存储有5种方 ...

  3. Android中数据存储(三)——SQLite数据库存储数据

    当一个应用程序在Android中安装后,我们在使用应用的过程中会产生很多的数据,应用都有自己的数据,那么我们应该如何存储数据呢? 数据存储方式 Android 的数据存储有5种方式: 1. Share ...

  4. Android中数据存储之SharedPreferences

    import android.content.Context; import android.content.SharedPreferences; import android.content.Sha ...

  5. android中数据存储的contentprovider的使用方法

    元数据接口 package com.example.contentproviderprojecrt; import android.net.Uri; import android.provider.B ...

  6. Android 中数据存储方式有哪些?

    a) 文件存储b) xml,SharedPreferencec) SQLite数据库d) ContentProvidere) 网络

  7. Android笔记——Android中数据的存储方式(三)

    Android系统集成了一个轻量级的数据库:SQLite,所以Android对数据库的支持很好,每个应用都可以方便的使用它.SQLite作为一个嵌入式的数据库引擎,专门适用于资源有限的设备上适量数据存 ...

  8. Android笔记——Android中数据的存储方式(二)

    我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效 ...

  9. Android笔记——Android中数据的存储方式(一)

    Android中数据的存储方式 对于开发平台来讲,如果对数据的存储有良好的支持,那么对应用程序的开发将会有很大的促进作用. 总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.其 ...

随机推荐

  1. HP网络打印机--如何添加打印机

    HP网络打印机采用web服务形式,应添加打印机-通过Internet的打印机--填写网址http://192.168.1.10:80(从其他win7电脑-计算机-网络-网络设备中双击添加打印机,然后在 ...

  2. ng-repeat

    <html ng-app="compile"> <head> <script src="http://apps.bdimg.com/libs ...

  3. STL源码学习----lower_bound和upper_bound算法

    转自:http://www.cnblogs.com/cobbliu/archive/2012/05/21/2512249.html 先贴一下自己的二分代码: #include <cstdio&g ...

  4. 源码安装php

    php安装扩展源yum install epel-releaseyum updateyum install libmcrypt libmcrypt-devel mcrypt mhash -yyum i ...

  5. spring-boot 文件上传获取不到File原因,MultipartHttpServletRequest.getFiles为空

    以下是spring-boot的处理方式,其他可参考处理具体问题:1.CommonsMultipartResolver解析不到request中的文件流2.Controller方法参数MultipartH ...

  6. iOS设计 - 一款APP从设计稿到切图过程概述

    这篇文章站在GUI设计师的角度概述了APP从项目启动到切片输出的过程,相当于工作流程的介绍.这里写的不是一种规范,只是一种工作方法,加上技术的更新是非常快的,大家在具体工作中,一定要灵活运用. 这里我 ...

  7. FPGA 开发笔记 点滴

    1.添加包含的文件或参数文件(define.v)的方式:如果文件在工程目录下的一个文件夹下,则可用 `include "../文件夹名/define.v",  文件和工程载同一目录 ...

  8. 限制HTML的input只能输入数字、英文、汉字...

    限制HTML的input只能输入数字.英文.汉字... 关键词:正则表达式, JavaScript, HTML, input 常用HTML正则表达式1.只能输入数字和英文的:<input onk ...

  9. 一、常见PHP网站安全漏洞

    对于PHP的漏洞,目前常见的漏洞有五种.分别是Session文件漏洞.SQL注入漏洞.脚本命令执行漏洞.全局变量漏洞和文件漏洞.这里分别对这些漏洞进行简要的介绍. 1.session文件漏洞 Sess ...

  10. WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案(转)

    对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...