您当前的位置:首页 > Android教程

Android开发学习教程(30)- Android数据存储的几种方式

时间:2022-01-26 07:20:05 阅读数:30,407人阅读
版权声明:转载请注明出处,谢谢!
—— 十七岁全力以赴,十八岁好好庆祝,Fighting!

Android数据存储方式

Android数据持久化存储共有四种方式,分别是文件存储、SharedPreferences、Sqlite数据库和ContentProvider。在本篇幅中只介绍前面三种存储方式,因为ContentProvider属于android四大组件之一,所以它的数据存储方式在介绍四大组件的时候说明。

1、文件存储

文件存储不对存储的内容进行任何的格式化处理,所有数据都是原封不动地保存到文件当中的,因而它比较适合用于存储一些简单的文本数据或二进制数据。文件存储有两种方式,一是存储到手机内存中(memory),一是存储到sd卡中。

1.1 存储到手机内存中

Context类中提供了一个 openFileOutput()方法,可以用于将数据存储到指定的文件中:

		openFileOutput(name, mode):
		name:是文件名,注意这里指定的文件名不可以包含路径,因为所有的文件都是默认存储到/data/data//files/(等价于 getFilesDir())目 录下 的 
		mode:是文件的操作模式 ,MODE_PRIVATE:默认的操作模式,同名文件内容会被覆盖。MODE_APPEND则表示 如果该文件已存在就往文件里面追加内容,不存在就创建新文件。
	  
		public void save(String data) {
			FileOutputStream out = null;
			BufferedWriter writer = null;
			try {
				out = openFileOutput("content", Context.MODE_PRIVATE);
				writer = new BufferedWriter(new OutputStreamWriter(out));
				writer.write(data);
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				try {
					if (writer != null) {
						writer.close();
					}
				} catch (IOException e) {
				}
			}
		}

		public String read() {
			FileInputStream in = null;
			BufferedReader reader = null;
			StringBuilder content = new StringBuilder();
			try {
				in = openFileInput("content");
				reader = new BufferedReader(new InputStreamReader(in));
				String line = "";
				while ((line = reader.readLine()) != null) {
					content.append(line);
				}
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				if (reader != null) {
					try {
						reader.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
			return content.toString();
		}
	  

1.2 存储到手机SD卡中

前面说的存储到手机内存,数据是存储在应用程序内的,文件大小受到限制,而且数据随着程序的卸载而自动清除;当要存储大的文件时,或者想数据不会随着程序的卸载而自动清除就可以使用sd卡方式存储了。使用sd卡存储主要是使用Environment这个类的功能。

注:在Android6.0之后读写SD卡等危险的操作需要动态申请存储等权限。否则可能会报异常java.io.FileNotFoundException: /storage/emulated/0/test: open failed: EACCES (Permission denied)

第 1 步:在AndroidManifest清掉中添加所需权限

		  
		  
	  

第 2 步:动态申请权限

		  requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, 101);
	  

第 3 步:使用Environment获取SD目录,读写数据:

		public void save(String data) {
			try {
				// 获取SDcard路径
				File sdCardDir = Environment.getExternalStorageDirectory();
				// SDCard目录:/mnt/sdcard
				String sdcardPath = sdCardDir.getAbsolutePath();
				File file = new File(sdCardDir, "test");
				RandomAccessFile raf = new RandomAccessFile(file, "rw");
				// 将文件记录指针移动最后
				raf.seek(file.length());
				// 输出文件内容
				raf.write(data.getBytes());
				raf.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		public String read() {
			StringBuilder sb = new StringBuilder();
			// 获取SDcard路径
			try {
				File sdCardDir = Environment.getExternalStorageDirectory();
				File file = new File(sdCardDir, "test");
				InputStream inputStream = new FileInputStream(file);
				int len = 0;
				byte[] buffer = new byte[1024];
				while ((len = inputStream.read(buffer)) != -1) {
					sb.append(new String(buffer, 0, len));
				}
				// 关闭流
				inputStream.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
			return sb.toString();
		}
	  

2、SharedPreferences存储

SharedPreferences类,它是一个轻量级的存储类,适合用于保存软件配置参数。SharedPreferences是使用键值对的方式来存储数据的,存储数据是以xml文件形式存储,文件存放在/data/data/your package name/shared_prefs目录下。

		public void save(String data) {
			SharedPreferences preferences = getSharedPreferences("test", MODE_APPEND);
			SharedPreferences.Editor editor = preferences.edit();
			editor.putString("content", data);
			editor.commit();
		}

		public String read() {
			SharedPreferences preferences = getSharedPreferences("test", MODE_PRIVATE);
			return preferences.getString("content", "");
		}
	  

SQLite存储在下一篇详细讲解

本篇源码下载地址:https://pan.baidu.com/s/1_SozUTQJIuY64PdcaEvc-w 提取码: helu

------转载请注明出处,感谢您对原创作者的支持------

有偿提供技术支持、Bug修复、项目外包、毕业设计、大小作业

Android学习小站

Q Q:1095817610

微信:jx-helu

邮箱:1095817610@qq.com

添加请备注"Android学习小站"