Android中的File文件存储及读取file中的Bitmap

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

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

FileInputStream  openFileInput(fileName);  //输入流
FileOutputStream outputStream = openFileOutput(fileName, MODE_PRIVATE);  //输出流

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

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

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

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

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

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

MainActivity.java

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:

<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个问题要解决:

  1. 从EditText中识别出输入法输入的Bitmap,并记录
  2. 将文字和Bitmap存入文件,bitmap要单独编码
  3. 从文件中解析出文字信息和bitmap(解码)
  4. 在textview中 图文混合显示从文件中读出的文字和图片  -- 解决方法  利用SpannableString

    期待大神的解答

时间: 2024-12-22 00:59:05

Android中的File文件存储及读取file中的Bitmap的相关文章

【Android】14.1 内部文件存储和读取

分类:C#.Android.VS2015: 创建日期:2016-02-27 一.简介 内部存储是指将应用程序建立的私有文件保存在内部存储器(移动经销商卖的那种容量较小的手机卡)中. 应用程序可通过OpenFileInput方法和OpenFileOutput方法读取内部存储设备上的这些文件. 1.OpenFileOutput方法 该方法打开应用程序私有文件,为写入设备做准备.默认情况下,写入的文件会覆盖同名的原文件.如果要打开的文件不存在,则创建一个新文件. 该方法的语法格式如下: public

【Android】14.2 外部文件存储和读取

分类:C#.Android.VS2015: 创建日期:2016-02-27 一.简介 1.基本概念 内部存储的私有可用存储空间一般都不会很大,对于容量比较大的文件,例如视频等,应该将其存储在外部存储设备(SD卡)上. 注意,不要将手机内存和手机内插入的存储卡(手机卡.SD卡)混淆在一起,内存是不能持久存储的,一关机所有信息就全部丢失了,而内部存储(移动经销商卖的手机卡,容量小,但是没有它打不了电话).外部存储(SD卡,容量大,各种文件都能保存)都是可以持久存储的设备,因此才叫文件存储. 可以通过

Android File文件存储功能

1.介绍 2.使用方法 3.文件存储位置 4.java后台代码 package com.lucky.test47file; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Tex

Android文件存储往SD卡中写入文件路径出错问题求解。

============问题描述============   因为学习需要  看的老罗的视频  关于数据存储往SD卡写文件的那一部分  几乎完全照办的敲的代码   结果在pad上测试的时候和预想的有区别     本来应该存储到SD卡中的文件结果跑到pad自带内存中去了...   然后我尝试过把路径直接自己手动写  还是一样存到了自带内存中  这到底是为什么啊? 顺带吐槽一下万恶的导师  十一还要我们加班 求大神们指导呀~   国庆节玩的开学哟!!! ============解决方案1======

Android开发之资源文件存储

本文介绍在Android开发中关于资源文件的存储操作.对于Android资源也是非常重要的,主要包括文本字符串(strings).颜色(colors).数组(arrays).动画(anim).布局(layout).图像和图标(drawable).音频视频(media)和其他应用程序使用的组件. 在Android开发中,资源文件是我们使用频率最高的,无论是string,drawable,还是layout,这些资源都是我们经常使用到的,而且为我们的开发提供了很多方便,不过我们平时接触的资源目录一般都

Android 数据缓存-文件存储

Android APP开发过程中,我们通常会加入缓存模块.缓存即在本地保存APP的一些数据,大部分是将网络请求的数据进行本地保存,这样在缓存数据有效期内就可以直接使用缓存数据,降低了APP和服务器的压力,也极大提升了用户体验.Android数据缓存既可以以数据表的形式进行保存,也可以以文件的形式进行缓存.这里我主要通过缓存文件存储数据,并在APP下一次启动时读取. Usage 整个Cache模块的设计思想很简单,每个缓存数据都对应一个key,每个缓存数据又会被存到以此key命名的文件中,需要时直

PHP中Redis替代文件存储Session语句

php默认使用文件存储session,如果并发量大,效率非常低.而Redis对高并发的支持非常好,所以,可以使用redis替代文件存储session. 这里,介绍下php的 session_set_save_handler 函数的作用和使用方法.该函数定义用户级session保存函数(如打开.关闭.写入等).原型如下: bool session_set_save_hanler(callback open,callback close,callback read,callback write,ca

C# 获取文件路径,读取项目中某程序集下文件

获取文件路径 ------------------------------------------------------------------------- winform获取文件路径: string str1 =Process.GetCurrentProcess().MainModule.FileName;//获得当前执行的exe的文件名.string str2=Environment.CurrentDirectory;//获取和设置当前目录的完全限定路径.string str3=Dire

android 解决传送中文名文件到模拟器SD卡中

RT,android adb push命令解决中文名文件,把电脑本地的文件导入到Android模拟器AVD的SD卡中 1.通过adb push命令 PS:windows下不稳定,试了下中文名文件能传过去,但文件名为空,linux下可以.若win下该方法不行,参考第二种方法.字幕数字文件名不必说了,肯定没问题. 通过adb push,则可将文件添加到SD卡中.如果想在push的时候修改文件名称的话,只需要修改push的第二个参数改成完整路径(目录+文件名),如E:/videos/welcom.mp