一,分类
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 读取数据
三,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() 获取文件的绝对路径
外部存储 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) 私有目录的下载目录
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(); } }