数据存储方式概述

image.png

image.png

Android中文件的访问权限

image.png

实例

image.png

关键代码

image.png
image.png

◆注意:Java中RandomAccessFile类支持随机访问文件内容,通过seek()定位文件位置。
FileDemo.zip
image.png

MainActivity.java

  1. package com.bluelesson.filedemo;
  2. import android.content.Context;
  3. import android.content.SharedPreferences;
  4. import android.os.Bundle;
  5. import android.support.v7.app.AppCompatActivity;
  6. import android.view.View;
  7. import android.widget.EditText;
  8. import android.widget.Toast;
  9. import java.io.FileNotFoundException;
  10. import java.io.FileOutputStream;
  11. import java.io.IOException;
  12. public class MainActivity extends AppCompatActivity {
  13. @Override
  14. protected void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.activity_main);
  17. }
  18. public void onClick(View view) {
  19. int id = view.getId();
  20. String name = null;
  21. int mode = 0;
  22. switch (id){
  23. case R.id.btn_private:
  24. name = "private.txt";
  25. mode = Context.MODE_PRIVATE;
  26. break;
  27. case R.id.btn_append:
  28. name = "append.txt";
  29. mode = Context.MODE_APPEND;
  30. break;
  31. case R.id.btn_global_read:
  32. name = "global_read.txt";
  33. mode = Context.MODE_WORLD_READABLE;
  34. break;
  35. case R.id.btn_global_write:
  36. name = "global_write.txt";
  37. mode = Context.MODE_WORLD_WRITEABLE;
  38. break;
  39. case R.id.btn_global_rw:
  40. name = "global_rw.txt";
  41. mode = Context.MODE_WORLD_READABLE|Context.MODE_WORLD_WRITEABLE;
  42. break;
  43. }
  44. try {
  45. FileOutputStream outputStream = openFileOutput(name,mode);
  46. String content = "这是我的内容";
  47. outputStream.write(content.getBytes());
  48. outputStream.close();
  49. } catch (FileNotFoundException e) {
  50. e.printStackTrace();
  51. } catch (IOException e) {
  52. e.printStackTrace();
  53. }
  54. }
  55. }

activity_main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:orientation="vertical"
  6. android:layout_width="match_parent"
  7. android:layout_height="match_parent"
  8. tools:context=".MainActivity">
  9. <Button
  10. android:id="@+id/btn_private"
  11. android:text="私有方式"
  12. android:textSize="20sp"
  13. android:onClick="onClick"
  14. android:layout_width="match_parent"
  15. android:layout_height="wrap_content" />
  16. <Button
  17. android:id="@+id/btn_append"
  18. android:text="追加方式"
  19. android:textSize="20sp"
  20. android:onClick="onClick"
  21. android:layout_width="match_parent"
  22. android:layout_height="wrap_content" />
  23. <Button
  24. android:id="@+id/btn_global_read"
  25. android:text="全局读方式"
  26. android:textSize="20sp"
  27. android:onClick="onClick"
  28. android:layout_width="match_parent"
  29. android:layout_height="wrap_content" />
  30. <Button
  31. android:id="@+id/btn_global_write"
  32. android:text="全局写方式"
  33. android:textSize="20sp"
  34. android:onClick="onClick"
  35. android:layout_width="match_parent"
  36. android:layout_height="wrap_content" />
  37. <Button
  38. android:id="@+id/btn_global_rw"
  39. android:text="全局读写方式"
  40. android:textSize="20sp"
  41. android:onClick="onClick"
  42. android:layout_width="match_parent"
  43. android:layout_height="wrap_content" />
  44. </LinearLayout>

数据存储方式3:Shared Preferences

介绍

image.png

核心原理

image.png

image.png

关键代码

image.png

main1.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent">
  6. <EditText
  7. android:id="@+id/edt1"
  8. android:hint="请在此输入密码"
  9. android:layout_width="match_parent"
  10. android:layout_height="wrap_content" />
  11. <Button
  12. android:id="@+id/btn_set"
  13. android:text="保存口令"
  14. android:textSize="20sp"
  15. android:onClick="btnClick"
  16. android:layout_width="match_parent"
  17. android:layout_height="wrap_content" />
  18. <Button
  19. android:id="@+id/btn_get"
  20. android:text="获取口令"
  21. android:textSize="20sp"
  22. android:onClick="btnClick"
  23. android:layout_width="match_parent"
  24. android:layout_height="wrap_content" />
  25. </LinearLayout>

MainActivity.java

  1. package com.bluelesson.filedemo;
  2. import android.content.Context;
  3. import android.content.SharedPreferences;
  4. import android.os.Bundle;
  5. import android.support.v7.app.AppCompatActivity;
  6. import android.view.View;
  7. import android.widget.EditText;
  8. import android.widget.Toast;
  9. import java.io.FileNotFoundException;
  10. import java.io.FileOutputStream;
  11. import java.io.IOException;
  12. public class MainActivity extends AppCompatActivity {
  13. @Override
  14. protected void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.main1);
  17. }
  18. public void btnClick(View view) {
  19. int id = view.getId();
  20. switch(id){
  21. case R.id.btn_set:
  22. setPass();
  23. break;
  24. case R.id.btn_get:
  25. getPass();
  26. break;
  27. }
  28. }
  29. private void getPass() {
  30. // 1. 获取ShredPreferences对象
  31. SharedPreferences sp = getSharedPreferences(
  32. "lock", // xml文件的名称,文件夹:/data/data/<package name>/shared_prefs
  33. Context.MODE_PRIVATE
  34. );
  35. // 2. 获取数据
  36. String pass = sp.getString("pass","-1");
  37. if(!pass.equals("-1")){
  38. Toast.makeText(this,"口令:"+pass,Toast.LENGTH_SHORT).show();
  39. }
  40. }
  41. private void setPass() {
  42. // 1. 获取口令
  43. EditText editText = findViewById(R.id.edt1);
  44. String pass = editText.getText().toString();
  45. // 2. 获取ShredPreferences对象
  46. SharedPreferences sp = getSharedPreferences(
  47. "lock", // xml文件的名称,文件夹:/data/data/<package name>/shared_prefs
  48. Context.MODE_PRIVATE
  49. );
  50. // 3. 获取编辑器对象
  51. SharedPreferences.Editor editor = sp.edit();
  52. // 4. 压入数据
  53. editor.putString("pass",pass);
  54. // 5. 提交保存
  55. editor.commit();
  56. // 6. 提示一下
  57. Toast.makeText(this,"保存完成",Toast.LENGTH_SHORT).show();
  58. }

image.png

image.png

image.png