CSDN:http://blog.csdn.net/xiangyong_1521/article/details/78665993 简书:http://www.jianshu.com/p/736dd7b63ece
文件存储是 Android 中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动的保存到文件当中的。它比较适合用于存储一些简单的文本数据或二进制数据。
Context 类中提供了一个openFileOutput()方法,可以用于将数据存储到指定的文件中。
这个方法接收两个参数,第一个参数是文件创建时使用的名称,注意这里指定的文件名不可以包含路径,因为所有文件都是默认储存到 /data/data/<包名>/files/ 目录下的。
第二个参数是文件的操作模式,主要有两种模式可选:
MODE_PRIVATE(覆盖原文) MODE_APPEND(追加内容) 。
openFileOutput() 方法返回的是一个 FileOutputStream 对象,得到这个对象之后就可以使用 Java 流的方式将数据写入到文件中了。
int i = 0; String md = " data"; FileOutputStream fileOutputStream; BufferedWriter bufferedWriter; private void inSave() { try { String out = md + (i++); //设置文件名称,以及存储方式 fileOutputStream = openFileOutput("md.txt",Context.MODE_APPEND); //创建一个OutputStreamWriter对象,传入BufferedWriter的构造器中 bufferedWriter = new BufferedWriter(new OutputStreamWriter(fileOutputStream)); //向文件中写入数据 bufferedWriter.write(out); } catch (IOException e) { e.printStackTrace(); } finally{ try { bufferedWriter.close(); } catch (Exception e2) { } } }
类似于将数据存储到文件中,Context 类中还提供了一个 openFileInput() 方法,用于从文件中读取数据。
openFileInput() 方法只接收一个参数,即要读取的文件名,然后系统会自动到 /data/data/<包名>/files/ 目录下去加载这个文件,并返回一个 FileInputStream 对象。
BufferedReader bufferedReader; FileInputStream fileInputStream; StringBuilder builder; private void inRead() { try { //设置将要打开的存储文件名称 fileInputStream = openFileInput("md.txt"); //FileInputStream -> InputStreamReader ->BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream)); //读取每一行数据,并追加到StringBuilder对象中,直到结束 builder = new StringBuilder(); String line = new String(); //读取每一行数据,并追加到StringBuilder对象中,直到结束 while ((line = bufferedReader.readLine()) != null) { builder.append(line); textView.setText(""+builder); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (bufferedReader != null) { try { bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } } } }
如果不能判定一部手机是否存在sdcard,如果没有,则需要提供其他解决方法,比如 保存到手机存储; 提示不存在sdcard; 可以使用:
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ //执行存储sdcard方法 } else{ //存储到手机中,或提示 Toast.makeText(this, "读取失败,SD卡不存在!", Toast.LENGTH_LONG).show();}