Android中的File文件存储及读取file中的Bitmap
16lz
2021-12-04
今年看了下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个问题要解决:
从EditText中识别出输入法输入的Bitmap,并记录
将文字和Bitmap存入文件,bitmap要单独编码
从文件中解析出文字信息和bitmap(解码)
在textview中 图文混合显示从文件中读出的文字和图片 -- 解决方法 利用SpannableString类
期待大神的解答
更多相关文章
- android selector 背景选择器
- Android之NDK开发
- android 静音与振动
- Android(安卓)File类
- imageView的使用(进行原样的保持和按照比例的缩放:)
- Android(安卓)Studio使用小指南
- Android应用数据备份
- 安卓xml文件中设置动画匀速旋转无效?
- 你知道android textView文字怎么竖向排列吗