日期16年8月30日学习

一、共享参数:

(1)、概念:

SharedPreferences是Android系统提供的一个通用的数据持久化框架,用于存储和读取key-value类型的原始基本数据类型对,目前支持String、int、long、float、boolean等基本类型的存储,对于自定义的对象数据类型,无法使用SharedPreferences来存储。

SharedPreferences主要用于存储系统的配置信息。例如上次登录的用户名,上次最后设置的配置信息(如:是否打开音效、是否使用振动,小游戏的玩家积分等)。当再次启动程序后依然保持原有设置。SharedPreferences用键值对方式存储,方便写入和读取。

(2)、常用方法:

/**

* --------------------------------保存共享参数--------------

*/

//        /*

//         * 1、通过context对象获得共享参数的对象

//         * 参数一:文件名称

//         * 参数二:指定共享参数文件的模式

//         *         Context.MODE_PRIVATE -> 表示该共享参数文件只能被本应用使用

//         *

//         *         4.2.2以后过时

//         *         Context.MODE_WORLD_READABLE -> 该共享参数文件可以被其他应用读取,以只读的方式打开

//         *         Context.MODE_WORLD_WRITEABLE -> 其他应用可以读写该共享参数文件

//         */

//        sharedPreferences = this.getSharedPreferences("config", Context.MODE_PRIVATE);

//        /*

//         * 2、通过共享参数的对象,再获得共享参数的编辑对象

//         */

//        editor = sharedPreferences.edit();

//

//        /*

//         * 3、用编辑对象填写内容

//         */

//        editor.putString("name", "张三");

//        editor.putInt("age", 16);

//

//        /*

//         * 4、提交

//         */

//        editor.commit();

-------------读取共享参数---------------

同样是先创建共享参数,指定共享模式

sharedPreferences = this.getSharedPreferences("config", Context.MODE_PRIVATE);

获取key值为name的String参数放到String中。也可以获得int类型的,把String改为int即可

String name = sharedPreferences.getString("name", null);

---共享参数可以用来保存用户名和密码,它是存储在内存中,在手机上要访问就要获得root权限。当然也有其他用处

--------------------------------下面创建一个共享参数的工具类------------------------

/**

* 共享参数的工具类

*

*/

public class SharedUtil {

private static SharedPreferences sharedPreferences;

private static SharedPreferences.Editor editor;

/**

* 共享参数初始化

*/

public static void init(Context context){

sharedPreferences = context.getSharedPreferences("config", Context.MODE_PRIVATE);

editor = sharedPreferences.edit();

}

public static void putString(String key, String value){

//putString是将一个String的参数存入里面

editor.putString(key, value);

editor.commit();

}

public static String getString(String key){

//getString是获取参数

return sharedPreferences.getString(key, null);

}

public static void putInt(String key, int value){

editor.putInt(key, value);

editor.commit();

}

public static int getInt(String key){

return sharedPreferences.getInt(key, -1);

}

public static void putBoolean(String key, boolean value){

editor.putBoolean(key, value);

editor.commit();

}

public static boolean getBoolean(String key){

return sharedPreferences.getBoolean(key, false);

}

}

二、内部存储

---------

一般内部文件存储的路径为:

/data/data/{appPackageName}/files/{filename}

内部存储都是用io流来读和写、操作方式和io流没有太多差别

----------获得内部存储的文件---使用for循环遍历输出----------

String[] strs = this.fileList();

for(String str : strs){

Log.d("print", "内部存储中的文件:" + str);

}

* 获得输出流----------将数据写到test.txt的文件中

* Context.MODE_APPEND 追加

Context.MODE_PRIVATE  不追加(覆盖)

*/

//        FileOutputStream out = null;

//        try {

//            out = this.openFileOutput("test.txt", Context.MODE_PRIVATE);

//            out.write("大王叫我来巡山".getBytes());

//            out.close();

//        } catch (Exception e) {

//            e.printStackTrace();

//        }

/*

* 获得输入流-----------将test.txt文件中的数据读出来输出到log上

*/

//        FileInputStream in = null;

//        try {

//            in = this.openFileInput("test.txt");

//            byte[] bs = new byte[1024];

//            in.read(bs);

//

//            String str = new String(bs).trim();

//            in.close();

//            Log.d("print", "文件中的内容:" + str);

----------------删除内部存储中的文件----------------

Context.deleteFile(String Filename)

三、拓展存储

----外部存储---------------

--------------------读写SD卡步骤-------------------------

public class SDCardHelper {

private static String TAG = "SDCardHelper";

/*

* 判断sdcard是否挂载

*/

public static boolean isSDCardMounted() {

return Environment.getExternalStorageState().equals(

Environment.MEDIA_MOUNTED);

}

/*

* 获取sdcard绝对物理路径

*/

public static String getSDCardPath() {

if (isSDCardMounted()) {

return Environment.getExternalStorageDirectory().getAbsolutePath();

} else {

return null;

}

}

/*

* 获取sdcard的全部的空间大小。返回MB字节

*/

public static long getSDCardSize() {

if (isSDCardMounted()) {

StatFs fs = new StatFs(getSDCardPath());

long size = fs.getBlockSize();

long count = fs.getBlockCount();

return size * count / 1024 / 1024;

}

return 0;

}

/*

* 获取sdcard的剩余的可用空间的大小。返回MB字节

*/

public static long getSDCardFreeSize() {

if (isSDCardMounted()) {

StatFs fs = new StatFs(getSDCardPath());

long size = fs.getBlockSize();

long count = fs.getAvailableBlocks();

return size * count / 1024 / 1024;

}

return 0;

}

/*

* 将文件(byte[])保存进sdcard指定的路径下

*/

public static boolean saveFileToSDCard(byte[] data, String dir,

String filename) {

BufferedOutputStream bos = null;

if (isSDCardMounted()) {

Log.i(TAG, "==isSDCardMounted==TRUE");

File file = new File(getSDCardPath() + File.separator + dir);

Log.i(TAG, "==file:" + file.toString() + file.exists());

if (!file.exists()) {

boolean flags = file.mkdirs();

Log.i(TAG, "==创建文件夹:" + flags);

}

try {

bos = new BufferedOutputStream(new FileOutputStream(new File(

file, filename)));

bos.write(data, 0, data.length);

bos.flush();

return true;

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

bos.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

return false;

}

/*

* 已知文件的路径,从sdcard中获取到该文件,返回byte[]

*/

public static byte[] loadFileFromSDCard(String filepath) {

BufferedInputStream bis = null;

ByteArrayOutputStream baos = null;

if (isSDCardMounted()) {

File file = new File(filepath);

if (file.exists()) {

try {

baos = new ByteArrayOutputStream();

bis = new BufferedInputStream(new FileInputStream(file));

byte[] buffer = new byte[1024 * 8];

int c = 0;

while ((c = bis.read(buffer)) != -1) {

baos.write(buffer, 0, c);

baos.flush();

}

return baos.toByteArray();

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

if (bis != null) {

bis.close();

baos.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

return null;

}

}-

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

//判断SD卡是否存在

//        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){

//            Log.d("print", "---->SD卡正常加载");

//        } else {

//            Log.d("print", "---->没有SD卡");

//        }

//获得拓展卡路径

//        File file = Environment.getExternalStorageDirectory();

//        Log.d("print", "外部存储的路径----->" + file.getAbsolutePath());

//        File[] files = file.listFiles();

//        for(File f : files){

//            Log.d("print", "拓展卡下的文件:" + f.getAbsolutePath());

//        }

//往拓展卡中存放一个小机器人

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){

//拓展卡存在

// /xxx/xxx/xxx/jqr.png

File file = new File(Environment.getExternalStorageDirectory(), "jqr.png");

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);

try {

bitmap.compress(CompressFormat.PNG, 100, new FileOutputStream(file));

} catch (FileNotFoundException e) {

e.printStackTrace();

}

}

------------------------读写拓展存储还需要获取权限--------------

读权限:android.permission.READ_EXTERNAL_STOARAGE

读写权限:android.permission.WRITE_EXTERNAL_STOARAGE

android 内部存储 共享,android存储:共享参数、内部存储、拓展存储相关推荐

  1. android 读取内部存储文件格式,Android中的数据储存之文件存储

    当我们在使用各种程序时,其实际上是在和各种数据打交道,当我们聊QQ,刷微博,看新闻,其实都是在和里面的数据交互 例如在聊天时发出的消息,以及在登录时输入的账号密码,其实都是瞬时数据,那什么是瞬时数据呢 ...

  2. android 获取手机SD卡和手机的内部存储

    在开发过程中有时候会获取手机的SD存储使用状况. 布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/re ...

  3. android的usb热插拔,Android M能让外部存储变成内部存储 支持U盘热插拔

    在此之前,Android一直对mirco SD卡之类的外部存储设备不太待见,最明显的例子就是和系统内部存储分得很清,俨然是庶出和嫡出的区别.今天发布的Android M,将有一个重大改变. 在Andr ...

  4. 亿点点概述Android基础必会的四五六【四大组件 五大存储 六大布局】

    Android 四大组件 五大存储 六大布局 1. Android四大组件 1.1 Activity 1.1.1 概念 1.1.2 生命周期 1.1.3 四种启动模式 1.1.4 三种跳转方式 1.2 ...

  5. provider android简书,Android 使用ContentProvider在应用间共享数据

    Android 使用ContentProvider在应用间共享数据 题图 www.gratisography.com 在开发的过程中,有时会有需求要实现应用程序之间实现数据共享,在Android系统中 ...

  6. android app数据存储,基于Android开发的APP数据存储研究

    谢原武+龙文 摘要: 作为一个完整的应用程序,数据存储操作是必不可少的.Android系统一共提供了四种数据存储方式分别为File文件存储.Shared Preferences存储.ContentPr ...

  7. android raw获取uri_音频-获取存储在android的res / raw文件夹中的.mp3文件的URI

    音频-获取存储在android的res / raw文件夹中的.mp3文件的URI 我在res / raw文件夹中存储了许多.mp3文件. 我正在使用以下代码获取.mp3文件的URI. Uri.pars ...

  8. android 手机存储 目录,android 62 手机存储目录的划分

    android下应用程序的路径和javase不同,应用程序的数据要保存自己的文件夹里面 > > getFileDir(); 获取自己的文件夹 /data/data/包名(应用程序的名字)/ ...

  9. 【Android 内存优化】Android 原生 API 图片压缩代码示例 ( PNG 格式压缩 | JPEG 格式压缩 | WEBP 格式压缩 | 动态权限申请 | Android10 存储策略 )

    文章目录 一. 图片质量压缩 二. 图片尺寸压缩 三. Android 10 文件访问 四. 完整源码示例 上一篇博客 [Android 内存优化]图片文件压缩 ( Android 原生 API 提供 ...

最新文章

  1. Science公布2021年度十大科学突破,AI这项前所未有的突破上榜
  2. 颈椎病2句话就能治疗好,你也试试看,一学就会!
  3. hikaripool连接保持_springboot2的hikari数据库连接池默认配置
  4. ML之FE:利用【数据分析+数据处理】算法对国内某平台上海2020年6月份房价数据集【12+1】进行特征工程处理(史上最完整,建议收藏)
  5. 成功解决UnicodeDecodeError: 'utf-8' codec can't decode byte 0x9a in position 0: invalid start byte
  6. axios create拦截_Vue学习-axios
  7. CodeVS 1044 拦截导弹(DP)
  8. 推荐 12个Idea 免费实用插件及插件离线安装方法
  9. python将mongodb导出_使用python从mongodb将数据导出到csv
  10. SQL实战之找出所有员工当前薪水salary情况
  11. flash上传头像,截取图像 组件演示
  12. 梯度下降法中的参数学习速率如何选择
  13. 关系数据库的三大范式以及BCNF范式
  14. 近期看到的很有意思的文章
  15. IT壹周刊:音乐网站收费虚晃一枪 搜狗输入法被指泄密
  16. yarn application -kill application_id yarn kill 超时任务脚本
  17. oracle收回dba权限后的检查,Oracle RAC GI 权限 检查和修复 方法
  18. 学习open62541 --- [58] 使用数据库存储历史数据
  19. 我对目前人工智能和机器学习的看法!
  20. 数据库事务 ACID

热门文章

  1. FAQ 01:合作型多任务与抢先式多任务有和区别
  2. 排序?吹泡泡吹到排序
  3. Android9显示模糊,app进入后台显示模糊效果
  4. pyplot 画多个图时搅合到了一起_【收藏贴】家里来了好些小朋友,什么游戏可以让孩子们玩到一起?...
  5. 【Unity】动作游戏开发实战详细分析-07-连续技与组合技功能设计
  6. 办公套件Office LTSC 2021中文
  7. Openlayers之加载Stamen地图
  8. DASH( Dynamic Adaptive Streaming over HTTP )协议
  9. 美nv写真手机壁纸采集源码
  10. python打开zip文件_Python ZIP 文件创建与读取