当前位置:   article > 正文

全面掌握SharePreferences_share peeuse

share peeuse

                                            全面掌握SharePreferences和android里的IO

 一、SharePreferences是什么?

      1、当程序中有少量的数据保存,而且这些数据的格式简单:都是一些字符串、标量类型的值等。比如应用程序的各种配置信息,应用程序的使用次数。这个时候就可以用SharePreferences对象保存,SharePreferences的数据总保存在/data/data/<package name>/shared_prefs目录下,SharePreferences数据总是以XML格式保存。
        2、SharePreferences数据文件是一个跟元素为<map>,每一个子元素是一个key-value,value是字符串类型时,使用<string name="time" value="sfdas"/>,如果是int就<int name="count" value="23"/>
  
二、SharePreferences开发步骤
            ①通过Sharepreferences preferences = getSharedPreferences(String name,int mode);创建SharePreferences实例(name是文件名,mode是权限模式)
            ②获取编辑对象SharePreferences.Editor editor = preferences.edit();
            ③写入数据,editor.putString("time",sdf.format(new Date()));
                                  editor.putInt("random",12);
                                  editor.commit();
            ④读数据       String time =  preferences.getString("time",null);//防止文件不存在或属性不存在,也会返回默认值
                                  int random = presferences.getInt("random",0);//防止文件不存在或属性不存在,也会返回默认值
            ⑤删除            editor.remove("time");
                                   editor.remove("random");
                                   editor.commit();
            ⑥全部删除      editor.clear();
                                    editor.commit();

三、SharePreferences 写入时的权限。
        
  1. import android.app.Activity;
  2. import android.content.SharedPreferences;
  3. import android.os.Bundle;
  4. public class PermissionActivity extends Activity {
  5. private final int[] MODES=new int[]{
  6. Activity.MODE_PRIVATE,//默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中,可以使用Activity.MODE_APPEND
  7. Activity.MODE_WORLD_READABLE,//表示当前文件可以被其他应用读取,
  8. Activity.MODE_WORLD_WRITEABLE,//表示当前文件可以被其他应用写入;
  9. //如果希望文件被其他应用读和写,可以传入:Activity.MODE_WORLD_READABLE+Activity.MODE_WORLD_WRITEABLE
  10. Activity.MODE_APPEND//该模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件
  11. };
  12. @Override
  13. public void onCreate(Bundle savedInstanceState) {
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.main);
  16. for(int i=0;i<MODES.length;i++){
  17. SharedPreferences mySharedPreferences=getSharedPreferences("data_"+String.valueOf(i+1),MODES[i]);
  18. SharedPreferences.Editor editor=mySharedPreferences.edit();
  19. editor.putString("name",String.valueOf(i+1));
  20. editor.commit();
  21. }
  22. }
  23. }

四、File存储
        java提供了一套完整的FileInputStream ,FileOutputStream,通过这些IO方便访问磁盘中的内容
        Android同样支持
        Context 提供了如下两个方法打开本应用程序的文件。
        1、FileInputStream openFileIput(String name);
             FileOutputStream openFileOutput(String name, int mode)
             mode 同样对应四种
  1. Activity.MODE_PRIVATE,//默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中,可以使用Activity.MODE_APPEND
  2. Activity.MODE_WORLD_READABLE,//表示当前文件可以被其他应用读取,
  3. Activity.MODE_WORLD_WRITEABLE,//表示当前文件可以被其他应用写入;
  4. //如果希望文件被其他应用读和写,可以传入:Activity.MODE_WORLD_READABLE+Activity.MODE_WORLD_WRITEABLE
  5. Activity.MODE_APPEND//该模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件
         2.Context下还提供其他的方法
             getDir(String name,int mode) 获取或创建文件夹
             File getFilesDir();获取该应用程序的数据文件夹下的全部文件
             String[]fileList(); 返回该应用程序的数据文件夹下的全部文件
             deleteFile(String name);删除指定文件

      

五、读写SD卡
             当程序通过Context的openFileInput 或openFileOutput来打开文件输入流,输出流,程序所打开的是应用程序的数据文件夹里的问价,这样所储存得数据少
                读写步骤
               ①调用Environment 的getExternalStorageState()方法判断手机上是否插SD卡
                               Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED),返回true,就是有
                ②调用Environment的getExternalStorageDirectory()方法来获取外部设备,也就是sd卡

                ③读写

  1. package org.crazyit.io;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.InputStreamReader;
  6. import java.io.RandomAccessFile;
  7. import android.app.Activity;
  8. import android.os.Bundle;
  9. import android.os.Environment;
  10. import android.view.View;
  11. import android.view.View.OnClickListener;
  12. import android.widget.Button;
  13. import android.widget.EditText;
  14. /**
  15. *
  16. * @author qiyue
  17. *
  18. */
  19. public class SDCardTest extends Activity
  20. {
  21. final String FILE_NAME = "/crazyit.bin";
  22. @Override
  23. public void onCreate(Bundle savedInstanceState)
  24. {
  25. super.onCreate(savedInstanceState);
  26. setContentView(R.layout.main);
  27. // 获取两个按钮
  28. Button read = (Button) findViewById(R.id.read);
  29. Button write = (Button) findViewById(R.id.write);
  30. // 获取两个文本框
  31. final EditText edit1 = (EditText) findViewById(R.id.edit1);
  32. final EditText edit2 = (EditText) findViewById(R.id.edit2);
  33. // 为write按钮绑定事件监听器
  34. write.setOnClickListener(new OnClickListener()
  35. {
  36. @Override
  37. public void onClick(View source)
  38. {
  39. // 将edit1中的内容写入文件中
  40. write(edit1.getText().toString());
  41. edit1.setText("");
  42. }
  43. });
  44. read.setOnClickListener(new OnClickListener()
  45. {
  46. @Override
  47. public void onClick(View v)
  48. {
  49. // 读取指定文件中的内容,并显示出来
  50. edit2.setText(read());
  51. }
  52. });
  53. }
  54. private String read()
  55. {
  56. try
  57. {
  58. // 如果手机插入了SD卡,而且应用程序具有访问SD的权限
  59. if (Environment.getExternalStorageState().equals(
  60. Environment.MEDIA_MOUNTED))
  61. {
  62. // 获取SD卡对应的存储目录
  63. File sdCardDir = Environment.getExternalStorageDirectory();
  64. // 获取指定文件对应的输入流
  65. FileInputStream fis = new FileInputStream(
  66. sdCardDir.getCanonicalPath() + FILE_NAME);
  67. // 将指定输入流包装成BufferedReader
  68. BufferedReader br = new BufferedReader(new
  69. InputStreamReader(fis));
  70. StringBuilder sb = new StringBuilder("");
  71. String line = null;
  72. // 循环读取文件内容
  73. while ((line = br.readLine()) != null)
  74. {
  75. sb.append(line);
  76. }
  77. // 关闭资源
  78. br.close();
  79. return sb.toString();
  80. }
  81. }
  82. catch (Exception e)
  83. {
  84. e.printStackTrace();
  85. }
  86. return null;
  87. }
  88. private void write(String content)
  89. {
  90. try
  91. {
  92. // 如果手机插入了SD卡,而且应用程序具有访问SD的权限
  93. if (Environment.getExternalStorageState().equals(
  94. Environment.MEDIA_MOUNTED))
  95. {
  96. // 获取SD卡的目录
  97. File sdCardDir = Environment.getExternalStorageDirectory();
  98. File targetFile = new File(sdCardDir
  99. .getCanonicalPath() + FILE_NAME);
  100. // 以指定文件创建 RandomAccessFile对象
  101. RandomAccessFile raf = new RandomAccessFile(
  102. targetFile, "rw");
  103. // 将文件记录指针移动到最后
  104. raf.seek(targetFile.length());
  105. // 输出文件内容
  106. raf.write(content.getBytes());
  107. // 关闭RandomAccessFile
  108. raf.close();
  109. }
  110. }
  111. catch (Exception e)
  112. {
  113. e.printStackTrace();
  114. }
  115. }
  116. }

上面程序用RandomAccessFile向SD卡中追加写入内容。他是基于游标去读写的,可以将游标每次移到最后皆可以了

通过以上只是我们就可以开发一个简单的文件管理器了
   

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/308820
推荐阅读
相关标签
  

闽ICP备14008679号