Android第二十五天数据存储(共享参数,内部存储,外部存储)

一,分类

1, 共享参数存储  
2, File存储   内部存储  和 外部存储 (SD卡的存储)
3, 数据库存储
4, ContentProvider  内容提供者
5, 网络存储

二,  共享参数存储   Shared Preferences

1,特征:  1, 存放轻量级数据的存储方式
2,  本质上存储是xml格式,然后通过键值对的方式对数据进行读取
        3,  通常用于存储简单的数据信息
        4,  应用程序卸载后,文件也会被删除
2, 存储的数据类型:
boolean, int, string, long, float
3, 存放数据的路径:
data/data/应用程序包名/shared_prefs/***.xml
4, 存储数据
4.1   获取共享参数的对象
    SharedPreferences sp = getSharedPreferences("mySets",Context.MODE_PRIVATE);
4.2   获取共享参数的编辑对象
    Editor editor = sp.edit();
4.3   向共享参数中写入数据
    editor.putString("msg","存入的内容");
4.4   提交数据
    editor.commit();
5, 读取数据
      5.1  得到共享参数对象
SharedPreferences sp = getSharedPreferences("mySets",Context.MODE_PRIVATE);
      5.2  读取数据

      String  msg = sp.getString("msg","如果没有取到值,那么显示的默认信息");

        6.代码示例:

        存入数据:

 //存数据
 /*1.实例化共享参数对象
 *参数一:表示文件名称(不需要添加拓展名称)
 * 存放目录: Android/data/data/包名/shared_prefs/文件名.xml文件中
 *参数二:模式
 * MODE_PRIVATE:文件只能被当前的应用程序访问,覆盖模式
 *               当写入数据的时候如果文件名字一致,则覆盖原来的数据
 * MODE_APPEND:当写入数据的时候如果文件名字一致,则在原来的数据 后面继续添加
 *
 * 实例化方式二
 *  getPreferences(MODE_PRIVATE)
 *  这种方式不用传入文件名称,会默认使用当前的Activity的名字作为文件名称
 */
 SharedPreferences sp = getSharedPreferences("MyInfo", MODE_PRIVATE);
//2.获取一个文件编辑对象
 SharedPreferences.Editor edit = sp.edit();
 //3.向共享参数中存入数据 只能存入 String boolean  int  float  等等
 edit.putString("text","修改展示文本");
 edit.putBoolean("isSingle",true);
 edit.putInt("color", Color.BLUE);
 //4.提交数据存储  这句话提交之后  才能保证数据已经被存上了
 edit.commit();

        取出数据:

//取数据
//获得MyInfo这个文件的 共享参数对象
SharedPreferences myInfo = getSharedPreferences("MyInfo", MODE_PRIVATE);

//获取文本
String text = myInfo.getString("text", "读取数据失败");
boolean isSingle = myInfo.getBoolean("isSingle", false);
int color = myInfo.getInt("color",Color.BLACK);

//将读取出来的数据作为 参数 展示出来
showTv.setText(text);
showTv.setTextColor(color);
showTv.append(String.valueOf(isSingle));


三,File存储

内部存储  Internal Storage 
1, 特点:  文件只能被本应用访问,其他应用不能访问
               当应用程序卸载后,程序在内部存储中的文件也会被删除
2, 路径:data/data/应用程序包名/files/***.***
3,  核心代码  FileOutputStream   FileInputStream
   3.1    存入数据
    3.1.1 打开内部存储的输出流
  FileOutputStream fos = openFileOutput(name,mode);
  3.1.2 写入数据
  fos.write(conent.getBytes());
  3.1.3  关闭流
  fos.close();
   3.2    读取数据
  3.2.1  打开内部存储文件的输入流
  FileInputStream fis = openFileInput(fileName);
  3.2.2  读取数据
  byte[] buffer = new byte[fis.available()];
  fis.read(buffer);
  3.2.3  关闭流
  fis.close();
4, Context 提供的方法来访问应用程序的文件夹
String[] fileList()    获取内部存储中所有的文件名称
File   getFileDir()    获取文件的绝对路径

boolean deleteFile(name)  删除某个文件

                5.代码示例:

                   存数据:

//存!
try {
    //使用这个方法获取一个文件输出流
    //参数一:文件名称
    //参数二:模式
    FileOutputStream outputStream = openFileOutput(fileName, MODE_PRIVATE);
    //写入数据
    outputStream.write(content.getBytes());
    //写完关闭
    outputStream.close();

} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

                    取数据:

FileInputStream inputStream;
try {
    inputStream = openFileInput(fileName);
    byte[] bytes = new byte[0];
    bytes = new byte[inputStream.available()];
    inputStream.read(bytes);
    inputStream.close();
    //将读出来的内容展示出来
    contentEt.setText(new String(bytes));
} catch (IOException e) {
    e.printStackTrace();
}

外部存储  external  storage  (扩展卡 SD卡)
1, 特点:  
分为两个部分:  SD卡公共目录  SD卡的私有目录
公共目录下的文件可以被应用程序共享, 私有目录中的文件只能被当前应用程序访问
当程序卸载后,公共目录中的文件不会被清除, 私有目录中的文件内容会被清
2, 路径
mnt/sdcard     4.0 版本之前的目录
                        storage/sdcard 4.0  版本之后的目录
storage/sdcard/Android/data/应用程序包名/files/   私有目录
3, 读写扩展卡都需要添加权限
<!--写 SD卡的权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!--读 SD卡的权限-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
4, 获取扩展卡的根目录
  Environment.getExternalStorageDirectory()
  Environment.getExternalStorageDirectory(Environment.DIRECTORY_DOWNLOADS)
DIRECTORY_ALARMS //警报的铃声
DIRECTORY_DCIM //相机拍摄的图片和视频保存的位置
DIRECTORY_DOWNLOADS //下载文件保存的位置
DIRECTORY_MOVIES //电影保存的位置, 比如 通过google play下载的电影
DIRECTORY_MUSIC //音乐保存的位置
DIRECTORY_NOTIFICATIONS //通知音保存的位置
DIRECTORY_PICTURES //下载的图片保存的位置
DIRECTORY_PODCASTS //用于保存podcast(博客)的音频文件
DIRECTORY_RINGTONES //保存铃声的位置
5, 获取当前扩展卡的状态
  Environment.getExternalStorageState()
         私有中的目录:
context.getExternalCacheDir()   私有目录的缓存目录
context.getExternalFilesDir(null)  私有目录的根目录
context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) 私有目录的下载目录

                6.代码示例:

  存数据:

//1.想要存入SD卡先判断SD卡是否可用
//Environment.getExternalStorageState() 获取当前手机sd卡的状态
//Environment.MEDIA_MOUNTED 表示sd卡可用的状态
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
    //手机的SD卡可用
    //获取SD卡路径并创建一个文件
    //获取SD卡根路径
    String path = Environment.getExternalStorageDirectory().getAbsolutePath();
    //创建一个文件
    File file = new File(path, fileName);
    //存入数据
    //写入数据到SD卡需要添加权限
    try {
        FileOutputStream outputStream = new FileOutputStream(file);
        outputStream.write(content.getBytes());
        outputStream.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

  取数据:

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
    String path = Environment.getExternalStorageDirectory().getAbsolutePath();
    File file = new File(path, fileName1);
    try {
        FileInputStream inputStream = new FileInputStream(file);
        BufferedInputStream bis = new BufferedInputStream(inputStream);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        int len = 0;
        byte[] bytes = new byte[1024];
        while ((len = bis.read(bytes)) != -1) {
            outputStream.write(bytes, 0, len);
        }
        String content1 = outputStream.toString();
        contentEt.setText(content1);

        //应该在finally里面关闭
        outputStream.close();
        bis.close();
        inputStream.close();

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值