今年看了下android的文件存储,大致和java实现差不多

android提供了如下两个方法来打开本应用程序的数据文件的IO流:

FileInputStreamopenFileInput(fileName);//输入流
FileOutputStreamoutputStream=openFileOutput(fileName,MODE_PRIVATE);//输出流

打开输出流的方法的第二个是表示打开文件的mode,大概有一下几种:

MODE_PRIVATE : 该文件只能被当前程序读写,且是覆盖的写

MODE_APPEND:以追加的方式打开文件,可向该文件中添加内容

MODE_WORLD_READABLE:该文件的内容可以被其他应用程序读

MODE_WORLD_WRITEABLE:该文件的内容可以被其他程序读、写

下面简单实现从一个Edittext中读取输入的文字,在Textview中显示出来

MainActivity.java

packagecom.file.filetest;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjava.io.UnsupportedEncodingException;importcom.file.filetest.R;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.TextView;publicclassMainActivityextendsActivity{publicstaticStringFILE_NAME="Testfile.bin";privateEditTexteditText;privateTextViewtextView;privateButtonreadButton;privateButtonwriteButton;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);readButton=(Button)findViewById(R.id.button2);writeButton=(Button)findViewById(R.id.button1);editText=(EditText)findViewById(R.id.editText1);textView=(TextView)findViewById(R.id.textView1);readButton.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){textView.setText(readFile(FILE_NAME));}});writeButton.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){writeFile(FILE_NAME,editText.getText().toString());}});}privateStringreadFile(StringfileName){BufferedReaderbReader=null;try{FileInputStreaminStream=openFileInput(fileName);InputStreamReaderreader=newInputStreamReader(inStream,"GBK");bReader=newBufferedReader(reader);StringBufferstringBuffer=newStringBuffer("");Stringstr;while((str=bReader.readLine())!=null){stringBuffer.append(str);}returnstringBuffer.toString();}catch(FileNotFoundExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}finally{if(bReader!=null){try{bReader.close();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}return"";}privatevoidwriteFile(StringfileName,Stringcontext){BufferedWriterwriter=null;FileOutputStreamoutputStream;try{outputStream=openFileOutput(fileName,MODE_PRIVATE);OutputStreamWriteroutputWriter=newOutputStreamWriter(outputStream,"GBK");writer=newBufferedWriter(outputWriter);writer.write(context);writer.newLine();writer.flush();}catch(FileNotFoundExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(UnsupportedEncodingExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}finally{if(writer!=null){try{writer.close();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}}}

布局文件main.xml:

<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="${relativePackage}.${activityClass}"><EditTextandroid:id="@+id/editText1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_alignParentTop="true"android:ems="10"><requestFocus/></EditText><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_below="@+id/editText1"android:text="TextView"/><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_below="@+id/textView1"android:layout_marginTop="98dp"android:text="写入"/><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/button1"android:layout_alignBottom="@+id/button1"android:layout_centerHorizontal="true"android:text="读取"/></RelativeLayout>

布局效果图如下:

以上基本实现了文件的读写功能,但是这只能满足输入的仅仅只是文字和数字的情况下,当输入图片(比如调用输入法输入一个笑脸)时,就有问题了,在网上大致搜了下,并没有找到比较好的解决方法,图文混排存入文件,有4个问题要解决:

  1. 从EditText中识别出输入法输入的Bitmap,并记录

  2. 将文字和Bitmap存入文件,bitmap要单独编码

  3. 从文件中解析出文字信息和bitmap(解码)

  4. 在textview中 图文混合显示从文件中读出的文字和图片 -- 解决方法 利用SpannableString类

    期待大神的解答



更多相关文章

  1. android selector 背景选择器
  2. Android之NDK开发
  3. android 静音与振动
  4. Android(安卓)File类
  5. imageView的使用(进行原样的保持和按照比例的缩放:)
  6. Android(安卓)Studio使用小指南
  7. Android应用数据备份
  8. 安卓xml文件中设置动画匀速旋转无效?
  9. 你知道android textView文字怎么竖向排列吗

随机推荐

  1. Android JNI使用方法
  2. Android Studio如何显示行号
  3. android Build类
  4. Android 配置及adb 命令
  5. Building Android Apps with AWS 使用AWS
  6. 【摘录】从Android界面开发谈起
  7. Android 入门篇
  8. android studio 获取证书指纹 SHA1
  9. 每周总结20130821——android控件的尺寸
  10. Android(安卓)重写返回键