当前位置:   article > 正文

Android数据读取 写入操作(SD卡文件存储、SharedPreferences存储)_android 实现读取sd卡上的文件的存取: (1)界面包括一个edittext和一个textvi

android 实现读取sd卡上的文件的存取: (1)界面包括一个edittext和一个textview和

数据和程序是应用构成的两个核心要素,数据存储永远是应用开发中最重要的主题之一,也是开发平台必须提供的基础功能。不光是在Android平台上,在其他的平台上,数据的存储永远是不可缺少的一块。Android的数据存储是构建在Linux的文件系统上,它充分利用Linux的账号系统来限定应用对数据的访问,部署了一套安全和灵活并重的数据存储解决方案。Android的文件框架,以及各种数据存储手段,具体包括:Android的文件系统操作,设置文件的使用,数据库的使用,数据源组件的使用以及云端数据的存储。

一、Android的文件系

Android系统文件目录

目录 内容
system 系统目录,放置在Android运行所需的核心库
data 应用目录,放置着运行在Android上的应用及其数据
sdcar 扩展存储卡目录,用来存放共享的数据
mnt 记录Android挂载的外部存储信息



 

 

 

Android的应用数据存储机制

在Android中,第三方应用及其数据,都存放在data目录下。其中,应用安装包会被存放到/data/app/目录下,每个安装包的文件名都形如:应用包名.apk,以避免重复。 比如包名为com.test.sample的应用,其应用数据的目录为/data/data/com.test.sample/。对应的数据库文件存储在/data/data/com.test.sample/database/目录下,设置文件存储在/data/data/com.test.sample/shared_prefs/,自定义的应用数据文件存储在目录/data/data/com.test.sample/files/下,等等。 不仅如此,Android还会为每个应用创建一个账号,只有通过本应用的账号才有权限去运行该应用的安装包文件,读写应用数据目录下的文件(当然root权限除外啊~),从而保证了该应用数据不会再被其他应用获取或破坏。

Android的文件操作

从应用数据目录下可以看出,数据文件可以分成两类,一类是放置在扩展存储器中的文件,即/sdcard/目录下的文件,它们可以被各个应用共享;而另一类则是放在该应用数据目录下文件,它们仅能被各个应用独享,不能被其他应用读写。 (1)扩展存储器中的文件读写方式跟标准的java文件处理无异。我们可以新建一个FileUtil的工具类来帮助我们处理文件的I/O操作,首先我们先判断SD卡的状态,看看SD卡是否可用,还有多少可用容量等。新建一个FileUtil的Class,加入方法
  1. // =================get SDCard information===================
  2. public static boolean isSdcardAvailable() {
  3. String status = Environment.getExternalStorageState();
  4. //Environment.MEDIA_MOUNTED表示SD卡正常挂载
  5. if (status.equals(Environment.MEDIA_MOUNTED)) {
  6. return true;
  7. }
  8. return false;
  9. }
  10. public static long getSDAllSizeKB() {
  11. //sd卡的位置
  12. File path = Environment.getExternalStorageDirectory();
  13. //StatFs获取的都是以block为单位的
  14. StatFs sf = new StatFs(path.getPath());
  15. // 得到单个block的大小
  16. long blockSize = sf.getBlockSize();
  17. // 获取所有数据块数
  18. long allBlocks = sf.getBlockCount();
  19. // 返回SD卡大小
  20. return (allBlocks * blockSize) / 1024; // KB
  21. }
  22. /**
  23. * free size for normal application
  24. * @return
  25. */
  26. public static long getSDAvalibleSizeKB() {
  27. File path = Environment.getExternalStorageDirectory();
  28. StatFs sf = new StatFs(path.getPath());
  29. long blockSize = sf.getBlockSize();
  30. long avaliableSize = sf.getAvailableBlocks();
  31. return (avaliableSize * blockSize) / 1024;// KB
  32. }

Environment.getExternalStorageDirectory()表示获取扩展存储器的目录。(建议使用此方法动态获取,因为 sdcard 这个目录路径是可配置的) StatFs.getBlockSize在API18后变为StatFs.getBlockSizeLong,其他类似的getBlock方法也一样  然后在activity中的button1加入事件
  1. case R.id.button1: {
  2. Log.d("TEST", "sdcard?"+FileUtil.isSdcardAvailable());
  3. Log.d("TEST", "全部容量"+(float)FileUtil.getSDAllSizeKB()/1024/1024);
  4. Log.d("TEST", "可用容量"+(float)FileUtil.getSDAvalibleSizeKB()/1024/1024);
  5. Toast.makeText(this, "status", Toast.LENGTH_SHORT).show();
  6. break;
  7. }

接下来我们来判断某个文件夹是否存在在SD卡中以及创建一个文件夹
  1. /**
  2. * @param director 文件夹名称
  3. * @return
  4. */
  5. public static boolean isFileExist(String director) {
  6. File file = new File(Environment.getExternalStorageDirectory()
  7. + File.separator + director);
  8. return file.exists();
  9. }
  10. /**
  11. * create multiple director
  12. * @param path
  13. * @return
  14. */
  15. public static boolean createFile(String director) {
  16. if (isFileExist(director)) {
  17. return true;
  18. } else {
  19. File file = new File(Environment.getExternalStorageDirectory()
  20. + File.separator + director);
  21. if (!file.mkdirs()) {
  22. return false;
  23. }
  24. return true;
  25. }
  26. }

其中File.separator是表示分隔符,在不同操作系统下是不同的,如windows就是代表"/",而在Linux下却是代表"\"。所以介意使用File.separator来代替分隔符。File.mkdirs()表示 创建一个文件夹,且可附带创建父目录,而mkdir()不行,详情的File大家可以查看官方文档,然后在activity中的button2加入响应事件

  1. case R.id.button2: {
  2. Log.d("TEST", "example文件夹存在?"+FileUtil.isFileExist("example"));
  3. Log.d("TEST", "创建forexample文件夹"+FileUtil.createFile("forexample"));
  4. Toast.makeText(this, "IsFile", Toast.LENGTH_SHORT).show();
  5. break;
  6. }

我们会发现在手机的sdcard目录下新建了一个forexample的文件夹。  最后我们来实现文件的读和写 写:

  1. /**
  2. *
  3. * @param director
  4. * (you don't need to begin with
  5. * Environment.getExternalStorageDirectory()+File.separator)
  6. * @param fileName
  7. * @param content
  8. * @param encoding
  9. * (UTF-8...)
  10. * @param isAppend
  11. * : Context.MODE_APPEND
  12. * @return
  13. */
  14. public static File writeToSDCardFile(String directory, String fileName,
  15. String content, String encoding, boolean isAppend) {
  16. // mobile SD card path +path
  17. File file = null;
  18. OutputStream os = null;
  19. try {
  20. if (!createFile(directory)) {
  21. return file;
  22. }
  23. file = new File(Environment.getExternalStorageDirectory()
  24. + File.separator + directory + File.separator + fileName);
  25. os = new FileOutputStream(file, isAppend);
  26. if (encoding.equals("")) {
  27. os.write(content.getBytes());
  28. } else {
  29. os.write(content.getBytes(encoding));
  30. }
  31. os.flush();
  32. } catch (IOException e) {
  33. Log.e("FileUtil", "writeToSDCardFile:" + e.getMessage());
  34. } finally {
  35. try {
  36. if (os != null) {
  37. os.close();
  38. }
  39. } catch (IOException e) {
  40. e.printStackTrace();
  41. }
  42. }
  43. return file;
  44. }
  45. /**
  46. * write data from inputstream to SDCard
  47. */
  48. public File writeToSDCardFromInput(String directory, String fileName,
  49. InputStream input) {
  50. File file = null;
  51. OutputStream os = null;
  52. try {
  53. if (createFile(directory)) {
  54. return file;
  55. }
  56. file = new File(Environment.getExternalStorageDirectory()
  57. + File.separator + directory + File.separator + fileName);
  58. os = new FileOutputStream(file);
  59. byte[] data = new byte[bufferd];
  60. int length = -1;
  61. while ((length = input.read(data)) != -1) {
  62. os.write(data, 0, length);
  63. }
  64. // clear cache
  65. os.flush();
  66. } catch (Exception e) {
  67. Log.e("FileUtil", "" + e.getMessage());
  68. e.printStackTrace();
  69. } finally {
  70. try {
  71. os.close();
  72. } catch (Exception e) {
  73. e.printStackTrace();
  74. }
  75. }
  76. return file;
  77. }
从上面可以看到有两种写入的方法,一种是将字符串直接写入,另一种是将数据流写到文件中。还有一点要提的是file的默认目录就是sdcard的目录,所以开头不必每次都要加sdcard的目录路径。  FileOutputStream(file, isAppend) 两个参数,左边是File文件,而右边是一个boolean值,为true时,数据将会接在原来文件的后面写入,而false是则会覆盖。 读:

  1. public static String ReadFromSDCardFile(String directory,String fileName){
  2. String res="";
  3. File file = null;
  4. file = new File(Environment.getExternalStorageDirectory()
  5. + File.separator + directory + File.separator + fileName);
  6. try {
  7. FileInputStream fis = new FileInputStream(file);
  8. int length = fis.available();
  9. byte [] buffer = new byte[length];
  10. fis.read(buffer); //将字节按照编码格式转成字符串
  11. res = EncodingUtils.getString(buffer, "UTF-8");
  12. fis.close();
  13. return res;
  14. }catch (FileNotFoundException e) {
  15. // TODO Auto-generated catch block
  16. Log.d("TEST", "FileNotFound");
  17. e.printStackTrace();
  18. }catch (Exception e) {
  19. Log.d("TEST", "Can Not Open File");
  20. e.printStackTrace();
  21. }
  22. return null;
  23. }

编码默认是UTF-8,若是想要改变的话,将其作为参数传入就行。 Activity中在按钮中加入响应
  1. case R.id.button3: {
  2. FileUtil.writeToSDCardFile("forexample", "test.txt",
  3. editText.getText().toString(), "UTF-8", true);
  4. Toast.makeText(this, "WriteFile", Toast.LENGTH_SHORT).show();
  5. break;
  6. }
  7. case R.id.button4: {
  8. textView.setText(FileUtil.ReadFromSDCardFile("forexample", "test.txt"));
  9. Toast.makeText(this, "ReadFile", Toast.LENGTH_SHORT).show();
  10. break;
  11. }

同时在根目录下的forexample文件夹里会找到test.txt,里面有着“我是cpacm”的一行字。到此,文件的读写成功。

(2)放在该应用数据目录下的文件读写     

存储在应用目录下的私有数据目录,通常不会通过File类的方式直接读写,而是利用一些封装过的类或函数来操作。一般可以通过Context.openFileOutput来执行。

在Activity加入两个方法,分别为文件的读和写

  1. public void writeFile(String fileName,String writestr){
  2. try{
  3. FileOutputStream fout =openFileOutput(fileName,MODE_PRIVATE);
  4. byte [] bytes = writestr.getBytes();
  5. fout.write(bytes);
  6. fout.close();
  7. }
  8. catch(Exception e){
  9. e.printStackTrace();
  10. }
  11. }
  12. //读数据
  13. public String readFile(String fileName){
  14. String res="";
  15. try{
  16. FileInputStream fin = openFileInput(fileName);
  17. int length = fin.available();
  18. byte [] buffer = new byte[length];
  19. fin.read(buffer);
  20. res = EncodingUtils.getString(buffer, "UTF-8");
  21. fin.close();
  22. }
  23. catch(Exception e){
  24. e.printStackTrace();
  25. }
  26. return res;
  27. }

同时在按钮的响应中加入
  1. case R.id.button5: {
  2. writeFile("test2.txt",editText.getText().toString());
  3. Toast.makeText(this, "WritePrivateFile", Toast.LENGTH_SHORT).show();
  4. break;
  5. }
  6. case R.id.button6: {
  7. textView.setText(readFile("test2.txt"));
  8. Toast.makeText(this, "ReadPrivateFile", Toast.LENGTH_SHORT).show();
  9. break;
  10. }

最后不要忘记在配置文件中声明权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

二、Android设置文件的使用

用户在使用应用时,常常会有一些个人偏好。为了满足不同用户的需求,应用通常会提供对应的设置项(Preference),让用户根据自己的喜好选择。这些设置信息会存储在本地并进行结构化地展示,使用户可以编辑。

    设置文件的存储和使用

Android应用的设置数据,可以通过android.content.SharedPreferences类来表示。它提供了一组数据读取的接口,可以从设置文件中读取给定键值的整形数,布尔型数等数据。 首先是获取SharedPreferences
  1. //在界面组件或服务组件中调用,构造应用默认的设置文件,默认文件名字为_preferences.xml
  2. //userInfo = PreferenceManager.getDefaultSharedPreferences(this);
  3. //或获取指定名字的SharedPreferences对象 参数分别为存储的文件名和存储模式。
  4. userInfo = getSharedPreferences("preferences", Activity.MODE_PRIVATE);
  5. //读取数据,如果无法找到则会使用默认值
  6. String username = userInfo.getString("name", "未定义姓名");
  7. String msg = userInfo.getString("msg", "未定义信息");
  8. //显示文本
  9. textView.setText(username+","+msg);

两种获取方式,默认或者指定一个文件 接下来加入响应按钮
  1. case R.id.button7: {
  2. //获得SharedPreferences的编辑器
  3. SharedPreferences.Editor editor = userInfo.edit();
  4. //将信息存入相应的键值中
  5. editor.putString("name", editText.getText().toString()).commit();
  6. Toast.makeText(this, "SetName", Toast.LENGTH_SHORT).show();
  7. break;
  8. }
  9. case R.id.button8: {
  10. //获得SharedPreferences的编辑器
  11. SharedPreferences.Editor editor = userInfo.edit();
  12. //将信息存入相应的键值中ss
  13. editor.putString("msg", editText.getText().toString()).commit();
  14. Toast.makeText(this, "SetMessage", Toast.LENGTH_SHORT).show();
  15. break;
  16. }
  17. case R.id.button9: { //获得SharedPreferences文件
  18. userInfo = getSharedPreferences("preferences", Activity.MODE_PRIVATE);
  19. String username = userInfo.getString("name", "未定义姓名");
  20. String msg = userInfo.getString("msg", "未定义信息");
  21. textView.setText(username+","+msg);
  22. Toast.makeText(this, "ShowMsg", Toast.LENGTH_SHORT).show();
  23. break;
  24. }
  25. case R.id.button10: { //输出XML文件
  26. textView.setText(print());
  27. Toast.makeText(this, "ShowXML", Toast.LENGTH_SHORT).show();
  28. break;
  29. }

************************************************完整代码***********************************************
FileUtil 工具类
  1. package com.example.administrator.myapplication;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.io.OutputStream;
  9. import android.os.Environment;
  10. import android.os.StatFs;
  11. import android.util.Log;
  12. import org.apache.http.util.EncodingUtils;
  13. public class FileUtil {
  14. private static int bufferd = 1024;
  15. private FileUtil() {
  16. }
  17. /*
  18. * <!-- 在SDCard中创建与删除文件权限 --> <uses-permission
  19. * android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!--
  20. * 往SDCard写入数据权限 --> <uses-permission
  21. * android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  22. */
  23. // =================get SDCard information===================
  24. public static boolean isSdcardAvailable() {
  25. String status = Environment.getExternalStorageState();
  26. if (status.equals(Environment.MEDIA_MOUNTED)) {
  27. return true;
  28. }
  29. return false;
  30. }
  31. public static long getSDAllSizeKB() {
  32. // get path of sdcard
  33. File path = Environment.getExternalStorageDirectory();
  34. //StatFs获取的都是以block为单位的 http://blog.csdn.net/pang3510726681/article/details/6969557
  35. StatFs sf = new StatFs(path.getPath());
  36. // get single block size(Byte)
  37. long blockSize = sf.getBlockSize();
  38. // 获取所有数据块数
  39. long allBlocks = sf.getBlockCount();
  40. // 返回SD卡大小
  41. return (allBlocks * blockSize) / 1024; // KB
  42. }
  43. /**
  44. * free size for normal application
  45. *
  46. * @return
  47. */
  48. public static long getSDAvalibleSizeKB() {
  49. File path = Environment.getExternalStorageDirectory();
  50. StatFs sf = new StatFs(path.getPath());
  51. long blockSize = sf.getBlockSize();
  52. long avaliableSize = sf.getAvailableBlocks();
  53. return (avaliableSize * blockSize) / 1024;// KB
  54. }
  55. // =====================File Operation==========================
  56. /**
  57. * @param director 文件夹名称
  58. * @return
  59. */
  60. public static boolean isFileExist(String director) {
  61. File file = new File(Environment.getExternalStorageDirectory()
  62. + File.separator + director);
  63. return file.exists();
  64. }
  65. public static boolean createFile(String director) {
  66. if (isFileExist(director)) {
  67. return true;
  68. } else {
  69. File file = new File(Environment.getExternalStorageDirectory()
  70. + File.separator + director);
  71. if (!file.mkdirs()) {
  72. return false;
  73. }
  74. return true;
  75. }
  76. }
  77. public static File writeToSDCardFile(String directory, String fileName,
  78. String content, boolean isAppend) {
  79. return writeToSDCardFile(directory, fileName, content, "", isAppend);
  80. }
  81. public static File writeToSDCardFile(String directory, String fileName,
  82. String content, String encoding, boolean isAppend) {
  83. // mobile SD card path +path
  84. File file = null;
  85. OutputStream os = null;
  86. try {
  87. if (!createFile(directory)) {
  88. return file;
  89. }
  90. file = new File(Environment.getExternalStorageDirectory()
  91. + File.separator + directory + File.separator + fileName);
  92. os = new FileOutputStream(file, isAppend);
  93. if (encoding.equals("")) {
  94. os.write(content.getBytes());
  95. } else {
  96. os.write(content.getBytes(encoding));
  97. }
  98. os.flush();
  99. } catch (IOException e) {
  100. Log.e("FileUtil", "writeToSDCardFile:" + e.getMessage());
  101. } finally {
  102. try {
  103. if (os != null) {
  104. os.close();
  105. }
  106. } catch (IOException e) {
  107. e.printStackTrace();
  108. }
  109. }
  110. return file;
  111. }
  112. /**
  113. * write data from inputstream to SDCard
  114. */
  115. public static File writeToSDCardFromInput(String directory, String fileName,
  116. InputStream input) {
  117. File file = null;
  118. OutputStream os = null;
  119. try {
  120. if (createFile(directory)) {
  121. return file;
  122. }
  123. file = new File(Environment.getExternalStorageDirectory()
  124. + File.separator + directory + File.separator + fileName);
  125. os = new FileOutputStream(file);
  126. byte[] data = new byte[bufferd];
  127. int length = -1;
  128. while ((length = input.read(data)) != -1) {
  129. os.write(data, 0, length);
  130. }
  131. // clear cache
  132. os.flush();
  133. } catch (Exception e) {
  134. Log.e("FileUtil", "" + e.getMessage());
  135. e.printStackTrace();
  136. } finally {
  137. try {
  138. os.close();
  139. } catch (Exception e) {
  140. e.printStackTrace();
  141. }
  142. }
  143. return file;
  144. }
  145. public static String ReadFromSDCardFile(String directory,String fileName){
  146. String res="";
  147. File file = null;
  148. file = new File(Environment.getExternalStorageDirectory()
  149. + File.separator + directory + File.separator + fileName);
  150. try {
  151. FileInputStream fis = new FileInputStream(file);
  152. int length = fis.available();
  153. byte [] buffer = new byte[length];
  154. fis.read(buffer);
  155. res = EncodingUtils.getString(buffer,"UTF-8");
  156. fis.close();
  157. return res;
  158. }catch (FileNotFoundException e) {
  159. // TODO Auto-generated catch block
  160. Log.d("TEST", "FileNotFound");
  161. e.printStackTrace();
  162. }catch (Exception e) {
  163. Log.d("TEST", "Can Not Open File");
  164. e.printStackTrace();
  165. }
  166. return null;
  167. }
  168. }
MainActivity
  1. package com.example.administrator.myapplication;
  2. import android.app.Activity;
  3. import android.content.SharedPreferences;
  4. import android.os.Bundle;
  5. import android.util.Log;
  6. import android.view.View;
  7. import android.widget.Button;
  8. import android.widget.EditText;
  9. import android.widget.TextView;
  10. import android.widget.Toast;
  11. import org.apache.http.util.EncodingUtils;
  12. import java.io.BufferedReader;
  13. import java.io.FileInputStream;
  14. import java.io.FileOutputStream;
  15. import java.io.InputStreamReader;
  16. public class MainActivity extends Activity implements View.OnClickListener {
  17. /**
  18. * 存储后的文件路径:/data/data/<package name>/shares_prefs + 文件名.xml
  19. */
  20. public static final String PATH = "/data/data/com.example.administrator/shared_prefs/preferences.xml";
  21. private SharedPreferences userInfo;
  22. private Button button1;
  23. private Button button2;
  24. private Button button3;
  25. private Button button4;
  26. private Button button5;
  27. private Button button6;
  28. private Button button7;
  29. private Button button8;
  30. private Button button9;
  31. private Button button10;
  32. private TextView textView;
  33. private EditText editText;
  34. @Override
  35. protected void onCreate(Bundle savedInstanceState) {
  36. super.onCreate(savedInstanceState);
  37. setContentView(R.layout.activity_main);
  38. // 获得界面的控件
  39. textView = (TextView) findViewById(R.id.textView1);
  40. editText = (EditText) findViewById(R.id.editText1);
  41. button1 = (Button) findViewById(R.id.button1);
  42. button1.setOnClickListener(this);
  43. button2 = (Button) findViewById(R.id.button2);
  44. button2.setOnClickListener(this);
  45. button3 = (Button) findViewById(R.id.button3);
  46. button3.setOnClickListener(this);
  47. button4 = (Button) findViewById(R.id.button4);
  48. button4.setOnClickListener(this);
  49. button5 = (Button) findViewById(R.id.button5);
  50. button5.setOnClickListener(this);
  51. button6 = (Button) findViewById(R.id.button6);
  52. button6.setOnClickListener(this);
  53. button7 = (Button) findViewById(R.id.button7);
  54. button7.setOnClickListener(this);
  55. button8 = (Button) findViewById(R.id.button8);
  56. button8.setOnClickListener(this);
  57. button9 = (Button) findViewById(R.id.button9);
  58. button9.setOnClickListener(this);
  59. button10 = (Button) findViewById(R.id.button10);
  60. button10.setOnClickListener(this);
  61. //在界面组件或服务组件中调用,构造应用默认的设置文件,默认文件名字为_preferences.xml
  62. //userInfo = PreferenceManager.getDefaultSharedPreferences(this);
  63. //或获取指定名字的SharedPreferences对象 参数分别为存储的文件名和存储模式。
  64. userInfo = getSharedPreferences("preferences.xml", Activity.MODE_PRIVATE);
  65. //读取数据,如果无法找到则会使用默认值
  66. String username = userInfo.getString("name", "未定义姓名");
  67. String msg = userInfo.getString("msg", "未定义信息");
  68. //显示文本
  69. textView.setText(username + "," + msg);
  70. }
  71. public void onClick(View v) {
  72. // TODO Auto-generated method stub
  73. switch (v.getId()) {
  74. case R.id.button1: {
  75. Log.d("TEST", "sdcard?" + FileUtil.isSdcardAvailable());
  76. Log.d("TEST", "全部容量" + (float) FileUtil.getSDAllSizeKB() / 1024 / 1024);
  77. Log.d("TEST", "可用容量" + (float) FileUtil.getSDAvalibleSizeKB() / 1024 / 1024);
  78. Toast.makeText(this,"全部容量" + (float) FileUtil.getSDAllSizeKB() / 1024 / 1024, Toast.LENGTH_SHORT).show();
  79. break;
  80. }
  81. case R.id.button2: {
  82. Log.d("TEST", "example文件夹存在?" + FileUtil.isFileExist("example"));
  83. Log.d("TEST", "创建forexample文件夹" + FileUtil.createFile("forexample"));
  84. Toast.makeText(this,""+ FileUtil.isFileExist("forexample"), Toast.LENGTH_SHORT).show();
  85. break;
  86. }
  87. case R.id.button3: {
  88. FileUtil.writeToSDCardFile("forexample", "test.txt",
  89. editText.getText().toString(), "UTF-8", true);
  90. Toast.makeText(this, "WriteFile", Toast.LENGTH_SHORT).show();
  91. break;
  92. }
  93. case R.id.button4: {
  94. textView.setText(FileUtil.ReadFromSDCardFile("forexample", "test.txt"));
  95. Toast.makeText(this, "ReadFile", Toast.LENGTH_SHORT).show();
  96. break;
  97. }
  98. case R.id.button5: {
  99. writeFile("test2.txt", editText.getText().toString());
  100. Toast.makeText(this, "WritePrivateFile", Toast.LENGTH_SHORT).show();
  101. break;
  102. }
  103. case R.id.button6: {
  104. textView.setText(readFile("test2.txt"));
  105. Toast.makeText(this, "ReadPrivateFile", Toast.LENGTH_SHORT).show();
  106. break;
  107. }
  108. case R.id.button7: {
  109. //获得SharedPreferences的编辑器
  110. SharedPreferences.Editor editor = userInfo.edit();
  111. //将信息存入相应的键值中
  112. editor.putString("name", editText.getText().toString()).commit();
  113. Toast.makeText(this, "SetName", Toast.LENGTH_SHORT).show();
  114. break;
  115. }
  116. case R.id.button8: {
  117. //获得SharedPreferences的编辑器
  118. SharedPreferences.Editor editor = userInfo.edit();
  119. //将信息存入相应的键值中ss
  120. editor.putString("msg", editText.getText().toString()).commit();
  121. Toast.makeText(this, "SetMessage", Toast.LENGTH_SHORT).show();
  122. break;
  123. }
  124. case R.id.button9: {
  125. userInfo = getSharedPreferences("preferences.xml", Activity.MODE_PRIVATE);
  126. String username = userInfo.getString("name", "未定义姓名");
  127. String msg = userInfo.getString("msg", "未定义信息");
  128. textView.setText(username + "," + msg);
  129. Toast.makeText(this, "ShowMsg", Toast.LENGTH_SHORT).show();
  130. break;
  131. }
  132. case R.id.button10: {
  133. textView.setText(print());
  134. Toast.makeText(this, "ShowXML", Toast.LENGTH_SHORT).show();
  135. break;
  136. }
  137. }
  138. }
  139. public void writeFile(String fileName, String writestr) {
  140. try {
  141. FileOutputStream fout = openFileOutput(fileName, MODE_PRIVATE);
  142. byte[] bytes = writestr.getBytes();
  143. fout.write(bytes);
  144. fout.close();
  145. } catch (Exception e) {
  146. e.printStackTrace();
  147. }
  148. }
  149. //读数据
  150. public String readFile(String fileName) {
  151. String res = "";
  152. try {
  153. FileInputStream fin = openFileInput(fileName);
  154. int length = fin.available();
  155. byte[] buffer = new byte[length];
  156. fin.read(buffer);
  157. res = EncodingUtils.getString(buffer, "UTF-8");
  158. fin.close();
  159. } catch (Exception e) {
  160. e.printStackTrace();
  161. }
  162. return res;
  163. }
  164. private String print() {
  165. StringBuffer buff = new StringBuffer();
  166. try {
  167. BufferedReader reader = new BufferedReader(new InputStreamReader(
  168. new FileInputStream(PATH)));
  169. String str;
  170. while ((str = reader.readLine()) != null) {
  171. buff.append(str + "/n");
  172. }
  173. } catch (Exception e) {
  174. e.printStackTrace();
  175. }
  176. return buff.toString();
  177. }
  178. }
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="fill_parent"
  3. android:layout_height="fill_parent"
  4. android:orientation="vertical" >
  5. <EditText
  6. android:layout_width="fill_parent"
  7. android:layout_height="wrap_content"
  8. android:id="@+id/editText1"
  9. />
  10. <TextView
  11. android:layout_width="fill_parent"
  12. android:layout_height="wrap_content"
  13. android:id="@+id/textView1"
  14. />
  15. <Button
  16. android:layout_width="fill_parent"
  17. android:layout_height="wrap_content"
  18. android:text="Status"
  19. android:id="@+id/button1"
  20. />
  21. <Button
  22. android:layout_width="fill_parent"
  23. android:layout_height="wrap_content"
  24. android:text="IsFile"
  25. android:id="@+id/button2"
  26. />
  27. <Button
  28. android:layout_width="fill_parent"
  29. android:layout_height="wrap_content"
  30. android:text="WriteFile"
  31. android:id="@+id/button3"
  32. />
  33. <Button
  34. android:layout_width="fill_parent"
  35. android:layout_height="wrap_content"
  36. android:text="ReadFile"
  37. android:id="@+id/button4"
  38. />
  39. <Button
  40. android:layout_width="fill_parent"
  41. android:layout_height="wrap_content"
  42. android:text="WritePrivateFile"
  43. android:id="@+id/button5"
  44. />
  45. <Button
  46. android:layout_width="fill_parent"
  47. android:layout_height="wrap_content"
  48. android:text="ReadPrivateFile"
  49. android:id="@+id/button6"
  50. />
  51. <Button
  52. android:layout_width="fill_parent"
  53. android:layout_height="wrap_content"
  54. android:text="SetName"
  55. android:id="@+id/button7"
  56. />
  57. <Button
  58. android:layout_width="fill_parent"
  59. android:layout_height="wrap_content"
  60. android:text="SetMessage"
  61. android:id="@+id/button8"
  62. />
  63. <Button
  64. android:layout_width="fill_parent"
  65. android:layout_height="wrap_content"
  66. android:text="ShowMessage"
  67. android:id="@+id/button9"
  68. />
  69. <Button
  70. android:layout_width="fill_parent"
  71. android:layout_height="wrap_content"
  72. android:text="ShowXML"
  73. android:id="@+id/button10"
  74. />
  75. </LinearLayout>



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

闽ICP备14008679号