Android数据存储(三)---File存储

原创 2017年08月24日 15:13:01

       Android系统一共提供了四种本地数据存储方式。分别是:SharePreference、SQLite、Content Provider和File。

       这里我们将要介绍文件存储方式,文件存储简单的来说就是一般的JAVASE中的IO流,只是把他应用于Android手机中而已。文件的存储位置是在data/data/包名/files文件夹下面,如图:




知识点比较简单,直接演示Demo:

布局文件:

<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="com.itman.filedemo.MainActivity" >

        <Button
            android:id="@+id/bt_save"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/bt_show"
            android:layout_alignParentTop="true"
            android:text="保存" />

        <Button
            android:id="@+id/bt_show"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/bt_show_dou"
            android:layout_centerHorizontal="true"
            android:text="取出" />

        <Button
            android:id="@+id/bt_show_dou"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/bt_save"
            android:layout_below="@+id/bt_save"
            android:text="文件" />

</RelativeLayout>

MainActivity.java程序:

public class MainActivity extends ActionBarActivity implements OnClickListener {
	private static final String TAG = "MainActivity";
	private Button bt_save;
	private Button bt_show;
	private Button bt_show_dou;
	private byte[] light_code;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		bt_save = (Button) findViewById(R.id.bt_save);
		bt_show = (Button) findViewById(R.id.bt_show);
		bt_show_dou = (Button) findViewById(R.id.bt_show_dou);

		bt_save.setOnClickListener(this);
		bt_show.setOnClickListener(this);
		bt_show_dou.setOnClickListener(this);

		light_code = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.bt_save:
			createFileWithByte(light_code, new StringBuilder("file"));
			break;

		case R.id.bt_show:
			Toast.makeText(
					this,
					Arrays.toString(readFileWithByte(new StringBuilder("file"))),
					Toast.LENGTH_SHORT).show();
			break;

		case R.id.bt_show_dou:
			show();
			break;
		}

	}

	private void show() {
		File file = new File(getBaseContext().getFilesDir().toString());
		String[] name = file.list();
		Toast.makeText(this, Arrays.toString(name), Toast.LENGTH_SHORT).show();

	}

	/**
	 * 创建文件并存储数据
	 * byte[] bytes		要存储的数据
	 * StringBuilder str	文件名称
	 */
	public void createFileWithByte(byte[] bytes, StringBuilder str) {
		/**
		 * 创建File对象,其中包含文件所在的目录以及文件的命名
		 */
		File file = new File(this.getFilesDir(), str.append(".txt").toString());
		// 创建FileOutputStream对象
		FileOutputStream outputStream = null;
		try {
			// 如果文件存在则删除
			if (file.exists()) {
				file.delete();
			}
			// 获取FileOutputStream对象
			outputStream = new FileOutputStream(file);
			// 获取BufferedOutputStream对象
			// 往文件所在的缓冲输出流中写byte数据
			outputStream.write(bytes);
			// 刷出缓冲输出流,该步很关键,要是不执行flush()方法,那么文件的内容是空的。
		} catch (Exception e) {
			// 打印异常信息
			e.printStackTrace();
		} finally {
			// 关闭创建的流对象
			if (outputStream != null) {
				try {
					outputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

	/**
	 * 取出制定文件的数据
	 */
	public byte[] readFileWithByte(StringBuilder str) {
		byte[] light = new byte[10];

		File file = new File(this.getFilesDir(), str.append(".txt").toString());
		// 创建FileOutputStream对象
		FileInputStream inputStream = null;
		try {
			inputStream = new FileInputStream(file);

			inputStream.read(light);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			// 关闭创建的流对象
			if (inputStream != null) {
				try {
					inputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return light;
	}

}

运行结果:(运行之后先点击保存,左图是文件名称,右图是文件存储的数据)

    

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android 中数据存储(File,SharedPreference,SqliteDatabase)

对于数据存储,android提供了三种方式: File SharedPreference SqliteDatabase File(文件存储)文件存储不对存储的内容进行任何的格式化处理,所有数据都是原封...

Android——数据存储之File

一 、Android中文件存储的操作 1. Activity的openFileOutput()方法可以用于把数据输出到文件中 2. 创建的文件保存在/data/data//files目录 3. 实现过...

玩转Android---组件篇---数据存储之File

原址:http://hualang.iteye.com/category/143855 我们可以将一些数据直接以文件的形式保存在设备中。例如,一些文本文件,PDF文件,音频文件,视频文件和图片等...

Android数据存储的三种方式-SharedPrefrences,File,SQLite

1,使用SharedPrefrences 用于简单少量的数据,数据的格式简单:都是普通的字符串,标量类型的值等,比如各种配置信息等等 SharedPrefrences与Editor简介: 创建Sha...

android开发之数据存储与访问(一)—File

android开发之数据存储与访问(一)—File 一、综述:很多时候我们的软件需要对处理后的数据进行存储或再次访问。Android为数据存储主要提供了以下几种方式: 1、文件 2、Shared...
  • f_t_p
  • f_t_p
  • 2013年06月27日 09:27
  • 682

Android[中级教程]第二章 数据存储之File

接着上面一章,这次我们将数据存储在File文件里,布局文件没什么改变,还是一样的布局,看main.xml ...

android基础入门数据存储之File(13)

一.数据存储之File:        android中可以在设备本身的存储设备或者外接的存储设备中创建用于保存数据的文件。在默认的状态下,文件是不能在不同的程序间共享的。        在and...

Android学习(19) -- 数据存储之File (简单登录保存用户名和密码)

简介          使用内部存储方式进行保存用户名和密码          内部存储空间 存在/data/data//files下面,可以通过getFilesDir()获取到该路径        ...
  • idiandi
  • idiandi
  • 2016年04月10日 21:19
  • 308

【Android数据存储】- File

读写本应用程序数据文件夹中的文件         此种方法读写的文件在/data/data/中         android 中提供了 openFileInput(String fileName...
  • kana007
  • kana007
  • 2014年05月11日 16:23
  • 1114
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android数据存储(三)---File存储
举报原因:
原因补充:

(最多只允许输入30个字)