今年看了下android的文件存儲,大體和java實現差很少java
android提供了以下兩個方法來打開本應用程序的數據文件的IO流:android
FileInputStream openFileInput(fileName); //輸入流
FileOutputStream outputStream = openFileOutput(fileName, MODE_PRIVATE); //輸出流
打開輸出流的方法的第二個是表示打開文件的mode,大概有一下幾種:app
MODE_PRIVATE : 該文件只能被當前程序讀寫,且是覆蓋的寫ide
MODE_APPEND:以追加的方式打開文件,可向該文件中添加內容佈局
MODE_WORLD_READABLE:該文件的內容能夠被其餘應用程序讀編碼
MODE_WORLD_WRITEABLE:該文件的內容能夠被其餘程序讀、寫.net
下面簡單實現從一個Edittext中讀取輸入的文字,在Textview中顯示出來
code
MainActivity.java
xml
package com.file.filetest; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import com.file.filetest.R; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends Activity { public static String FILE_NAME = "Testfile.bin"; private EditText editText; private TextView textView; private Button readButton; private Button writeButton; @Override protected void onCreate(Bundle savedInstanceState) { 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(new OnClickListener() { @Override public void onClick(View v) { textView.setText(readFile(FILE_NAME)); } }); writeButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { writeFile(FILE_NAME, editText.getText().toString()); } }); } private String readFile(String fileName) { BufferedReader bReader = null; try { FileInputStream inStream = openFileInput(fileName); InputStreamReader reader = new InputStreamReader(inStream, "GBK"); bReader = new BufferedReader(reader); StringBuffer stringBuffer = new StringBuffer(""); String str; while ((str = bReader.readLine()) != null) { stringBuffer.append(str); } return stringBuffer.toString(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (bReader != null) { try { bReader.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return ""; } private void writeFile(String fileName, String context) { BufferedWriter writer = null; FileOutputStream outputStream; try { outputStream = openFileOutput(fileName, MODE_PRIVATE); OutputStreamWriter outputWriter = new OutputStreamWriter( outputStream, "GBK"); writer = new BufferedWriter(outputWriter); writer.write(context); writer.newLine(); writer.flush(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (writer != null) { try { writer.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }
佈局文件main.xml:blog
<RelativeLayout xmlns: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}" > <EditText android: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> <TextView android: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" /> <Button android: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="寫入" /> <Button android: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類
期待大神的解答