今年看了下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>

布局效果图如下:

Android中的File文件存储及读取file中的Bitmap_第1张图片

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

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

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

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

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

    期待大神的解答



更多相关文章

  1. android studio第一个项目hello world之AndroidManifest.xml内容
  2. 你知道android textView文字怎么竖向排列吗
  3. Android利用drawable文件夹自定义控件背景、样式
  4. Android改变文件的权限
  5. 如何查看无法导出的android数据库文件?
  6. 设置TextView文字居中,代码实现android:layout_gravity
  7. React Native 官方文档中文版(含最新Android内容)
  8. 关于Android Studio里的Gradle文件

随机推荐

  1. Android消息机制不完全解析(下)
  2. android 中RGB颜色值得设定
  3. 下载各个版本SDK Tools及ADT的技巧
  4. 关于在Android设置全局变量随时获取conte
  5. android log机制——输出log
  6. Android发送数据到web服务器4种方式
  7. android 经典文章收集
  8. Android(安卓)使用弹出对话框,报Unable to
  9. Android之SQLite存取DATETIME类型
  10. Android关机方法